Example of Ramsey/uuid in laravelio/laravel.io

File composer.json (link to Github)
{
    "name": "laravelio/laravel.io",
    "require": {
        "php": "^8.0",
        "algolia/scout-extended": "^1.10",
        // ...

        "ramsey/uuid": "^4.1",

        // ...
    },
}
File database/migrations/2017_10_18_193001_create_subscriptions_table.php (link to Github)
// In this project, UUID is a primary key of the table

class CreateSubscriptionsTable extends Migration
{
    public function up()
    {
        Schema::create('subscriptions', function (Blueprint $table) {
            $table->uuid('uuid');
            $table->primary('uuid');
            $table->integer('user_id')->unsigned();
            $table->integer('subscriptionable_id');
            $table->string('subscriptionable_type')->default('');
            $table->timestamps();
        });

        Schema::table('subscriptions', function (Blueprint $table) {
            $table->index(['user_id', 'uuid']);
        });
    }
}
File app/Helpers/HasUuid.php (link to Github)
// This Trait would be added to all models that use UUID

use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;

trait HasUuid
{
    public function uuid(): UuidInterface
    {
        return Uuid::fromString($this->uuid);
    }

    public function getKeyName()
    {
        return 'uuid';
    }

    public function getIncrementing()
    {
        return false;
    }

    public static function findByUuidOrFail(UuidInterface $uuid): self
    {
        return static::where('uuid', $uuid->toString())->firstOrFail();
    }
}
File app/Models/Subscription.php (link to Github)
use App\Helpers\HasUuid;

final class Subscription extends Model
{
    use HasUuid;

    // ... other model properties and methods
}
File app/Jobs/CreateThread.php (link to Github)
// This Job creates a forum thread, and then a subscription to this thread, with UUID generated

use App\Models\Subscription;
use Ramsey\Uuid\Uuid;

final class CreateThread
{
    public function handle(): Thread
    {
        $thread = new Thread([
            'subject' => $this->subject,
            'body' => $this->body,
            'slug' => $this->subject,
        ]);

        // Subscribe author to the thread.
        $subscription = new Subscription();
        $subscription->uuid = Uuid::uuid4()->toString();
        $subscription->userRelation()->associate($this->author);
        $subscription->subscriptionAbleRelation()->associate($thread);

        $thread->subscriptionsRelation()->save($subscription);

        return $thread;
    }
}
File routes/bindings.php (link to Github)
// This additional routes file overrides the default Route Model Binding rules, like UUID

$uuid = '[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}';

Route::bind('subscription', function (string $uuid) {
    return App\Models\Subscription::findByUuidOrFail(Ramsey\Uuid\Uuid::fromString($uuid));
});
Route::pattern('subscription', $uuid);

// ... Other binding rules

Additional resources on ramsey/uuid: