Date
1 min read

Generating and Enforcing UUIDs in Laravel for Immutable Model IDs

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

trait HasUuid
{
    /**
     * Generate a new UUID for the given model.
     *
     * @return void
     */
    public static function bootHasUuid(): void
    {
        static::creating(function (Model $model) {
			$model->uuid = self::generateUuid();
        });

        static::updating(function (Model $model) {
            if (empty($model->uuid)) {
                $model->uuid = self::generateUuid();
            }
        });
    }

    /**
     * Generate a random UUID.
     *
     * @return string
     */
    public static function generateUuid(): string
    {
        do {
            $uuid = (string) Str::uuid();
            $exists = self::where('uuid', $uuid)->exists();
        } while ($exists);

        return $uuid;
    }
}

You might also like...

  • Read article

    How to save markdown using an editor and render it using Laravel

    How to setup a Laravel Markdown editor and convert the markdown to HTML easy.

  • Read article

    Laravel Aliases

    Laravel aliases are shortcuts for long namespaces in your code. They make your code cleaner and more readable, enhancing developer productivity.

  • Read article

    Exporting large amounts of data in Laravel

    An opinionated approach on how best to handle exporting large amounts of data in Laravel using commands and queues.

Let's work together 🤝

Line
Christopher Kelker

Chriscreates