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

    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.

  • 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

    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.

Let's work together 🤝

Line
Christopher Kelker

Chriscreates