spatie/laravel-binary-uuid
NOT MAINTAINED. Store UUID primary keys as optimized binary in Laravel models for faster indexing/queries (MySQL/SQLite). Provides UUID generation and Eloquent trait/scopes to encode/decode and query by UUID, plus benchmarks to compare performance.
Installation:
composer require spatie/laravel-binary-uuid
Add to config/app.php under providers:
Spatie\BinaryUuid\BinaryUuidServiceProvider::class,
Migration:
Use binaryUuid() column type in migrations:
Schema::create('users', function (Blueprint $table) {
$table->binaryUuid('id')->primary();
// ...
});
Model Configuration:
Extend Spatie\BinaryUuid\BinaryUuid trait in your model:
use Spatie\BinaryUuid\BinaryUuid;
class User extends Model
{
use BinaryUuid;
}
Replace a standard UUID primary key with binary UUID in a new table:
php artisan make:model Post -m
Update the migration:
Schema::create('posts', function (Blueprint $table) {
$table->binaryUuid('id')->primary();
$table->string('title');
$table->timestamps();
});
Run migration:
php artisan migrate
Model Integration:
BinaryUuid trait for automatic type casting.binary(16) in MySQL, improving indexing performance.Query Building:
User::where('id', $binaryUuid)->first();
User::where('id', '123e4567-e89b-12d3-a456-426614174000')->first();
UUID Generation:
Str::uuid() or BinaryUuid::generate():
$uuid = BinaryUuid::generate(); // Returns binary UUID
$uuidString = $uuid->toString(); // Convert to string
Relationships:
binaryUuid() in migrations:
$table->binaryUuid('user_id')->index();
BinaryUuid::generate() in seeders for consistent UUIDs.toString()).BinaryUuid::generate() for predictable test data.Database Compatibility:
binary(16)). PostgreSQL/SQLite require alternatives like michaeldyrynda/laravel-efficient-uuid.utf8mb4_bin for MySQL).Legacy Systems:
toString() for comparisons:
// ❌ Avoid:
User::where('id', '123e4567-e89b-12d3-a456-426614174000')->first(); // Works but risky
// ✅ Prefer:
$binaryUuid = BinaryUuid::fromString('123e4567-e89b-12d3-a456-426614174000');
User::where('id', $binaryUuid)->first();
Serialization:
toString() before storing.DB::enableQueryLog() to verify binary UUID queries:
DB::enableQueryLog();
User::where('id', $binaryUuid)->first();
dd(DB::getQueryLog());
binaryUuid() is used in migrations, not uuid() or string.Custom Generators:
generateBinaryUuid() in models for custom UUID logic:
protected static function generateBinaryUuid()
{
return BinaryUuid::fromString('custom-prefix-' . Str::uuid());
}
Hybrid Models:
HasUuid) by implementing getKeyType():
public function getKeyType()
{
return 'binary-uuid';
}
Caching:
cache()->put("user:{$user->id->toString()}", $user, now()->addHours(1));
michaeldyrynda/laravel-efficient-uuid for long-term projects. Key differences:
How can I help you explore Laravel packages today?