A Laravel Eloquent Model trait for adding and using a uuid with models.
The trait listens to the creating
event. It generates a new UUID and saves it in the uuid column on the model.
Featured in Laravel News
composer require jamesmills/eloquent-uuid
In order to use this in your models, just put use HasUuidTrait;
<?php
namespace App;
use JamesMills\Uuid\HasUuidTrait;
class User extends Eloquent
{
use HasUuidTrait;
}
In order to use this trait, your schema must be something like:
<?php
// ...
Schema::create('users', function (Blueprint $table) {
$table->primary('id');
$table->uuid('uuid')->unique(); // this will create a CHAR(36) field
$table->string('username', 32);
$table->string('password', 50);
// ...
});
You may use the findByUuidOrFail
method to try and fetch a model directly:
<?php
Route::get('/user/{uuid}', function($uuid) {
try {
return App\User::findByUuidOrFail($uuid);
} catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
abort(404);
}
});
Since uuid
gets registered as Route Key
using implicit binding[https://laravel.com/docs/5.8/routing#implicit-binding], your resource controllers will use uuid
instead of default id
column.
<?php
php artisan make:controller UserController --resource
/users/{user} route uses uuid
i.e. /users/bff37872-1450-47c7-b9f7-9a6d917796cf
You may also use the withUuid
and withUuids
local query scopes with the query builder.
<?php
Route::get('/user/{uuid}', function($uuid) {
$user = App\User::withUuid($uuid)->first();
if (! $user) {
// Do something else...
}
});
<?php
Route::delete('/users', function(Request $request) {
// Receive an array of UUIDs
$uuids = $request->input('uuids');
// Try to get the Users
$users = App\User::withUuids($uuids)->all();
// Handle the delete and return
$users->delete();
});
You're free to use this package, but if it makes it to your production environment I would highly appreciate you buying the world a tree.
It’s now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you contribute to my forest you’ll be creating employment for local families and restoring wildlife habitats.
You can buy trees at for my forest here offset.earth/jamesmills