Skip to content

Latest commit

 

History

History
109 lines (79 loc) · 3.16 KB

README.md

File metadata and controls

109 lines (79 loc) · 3.16 KB

Laravel Eloquent UUID

Packagist Packagist Packagist Buy us a tree

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

Installation

composer require jamesmills/eloquent-uuid

Use

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;
}

Schema requirements

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);
		// ...
	});

Querying your models

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();
});

Treeware

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