Skip to content
This repository was archived by the owner on Dec 10, 2018. It is now read-only.

Commit 0c7545f

Browse files
committed
refactor to use OrderedTimeCodec
1 parent b6eb15c commit 0c7545f

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

src/HasBinaryUuid.php

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,17 @@ public static function scopeWithUuidRelation(Builder $builder, $uuid, string $fi
4949
}, $uuid));
5050
}
5151

52-
public static function encodeUuid(string $uuid): string
52+
public static function encodeUuid($uuid): string
5353
{
5454
if (! Uuid::isValid($uuid)) {
5555
return $uuid;
5656
}
5757

58-
$uuid = str_replace('-', '', (string) $uuid);
58+
if (! $uuid instanceof Uuid) {
59+
$uuid = Uuid::fromString($uuid);
60+
}
5961

60-
return
61-
substr(hex2bin($uuid), 6, 2)
62-
.substr(hex2bin($uuid), 4, 2)
63-
.substr(hex2bin($uuid), 0, 4)
64-
.substr(hex2bin($uuid), 8, 8);
62+
return $uuid->getBytes();
6563
}
6664

6765
public static function decodeUuid(string $binaryUuid): string
@@ -70,18 +68,7 @@ public static function decodeUuid(string $binaryUuid): string
7068
return $binaryUuid;
7169
}
7270

73-
$uuidWithoutDashes = bin2hex(
74-
substr($binaryUuid, 4, 4)
75-
.substr($binaryUuid, 2, 2)
76-
.substr($binaryUuid, 0, 2)
77-
.substr($binaryUuid, 8, 8)
78-
);
79-
80-
$uuidWithDashes = collect([8, 13, 18, 23])->reduce(function ($uuid, $position) {
81-
return substr_replace($uuid, '-', $position, 0);
82-
}, $uuidWithoutDashes);
83-
84-
return $uuidWithDashes;
71+
return Uuid::fromBytes($binaryUuid)->toString();
8572
}
8673

8774
public function getUuidTextAttribute(): string

src/UuidServiceProvider.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use Illuminate\Database\Schema\Grammars\Grammar;
99
use Illuminate\Database\Query\Grammars\MySqlGrammar as IlluminateMySqlGrammar;
1010
use Illuminate\Database\Query\Grammars\SQLiteGrammar as IlluminateSQLiteGrammar;
11+
use Ramsey\Uuid\Codec\OrderedTimeCodec;
12+
use Ramsey\Uuid\Uuid;
13+
use Ramsey\Uuid\UuidFactory;
1114

1215
class UuidServiceProvider extends ServiceProvider
1316
{
@@ -17,6 +20,8 @@ public function boot()
1720
$connection = app('db')->connection();
1821

1922
$connection->setSchemaGrammar($this->createGrammarFromConnection($connection));
23+
24+
$this->optimizeUuids();
2025
}
2126

2227
protected function createGrammarFromConnection(Connection $connection): Grammar
@@ -38,4 +43,15 @@ protected function createGrammarFromConnection(Connection $connection): Grammar
3843

3944
return new MySqlGrammar();
4045
}
46+
47+
protected function optimizeUuids(): void
48+
{
49+
$factory = new UuidFactory();
50+
51+
$codec = new OrderedTimeCodec($factory->getUuidBuilder());
52+
53+
$factory->setCodec($codec);
54+
55+
Uuid::setFactory($factory);
56+
}
4157
}

0 commit comments

Comments
 (0)