人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel で モデルのプライマリキーをordered UUID (ULID) に変更する

● A. Laravel で rorecek/laravel-ulid を使ってモデルのプライマリキーをordered UUID (ULID) に変更する

1. rorecek/laravel-ulidのインストール

composer require rorecek/laravel-ulid

2. テーブルの型の変更をする

$table->bigIncrements('id');

   ↓

$table->char('id', 26)->primary();

3. モデルに以下を追加する

    use HasUlid;

    public $incrementing = false;
    
    protected $keyType = 'string';

以上です。

引用 : https://qiita.com/mitashun/items/90891c4f9e95bfabfe17

● B. Laravel で モデルのプライマリキーをordered UUID (ULID) に変更する

(例として News.php モデルのプライマリキーを変更してみます)

・1. モデルのプライマリキーの型を変更します

以下のプロパティーを追加します

app/Models/News.php

    // uuidなのでインクリメントOFF
    public $incrementing = false;

    // uuidなので string型
    protected $keyType = 'string';    

・2. モデルの新規作成時に自動的にorderedUuid をIDリセットするようにフックを追加する

同じくモデルファイルに以下を追加します

app/Models/News.php

    protected static function boot()
    {
        parent::boot();

        self::creating(function(News $model) {
            $model->id = \Str::orderedUuid();
        });
    }

・3. マイグレーションファイルの設定を変更して再度データベースを作成します

database/migrations/xxxxxxxx_create_news_table.php

// $table->increments('id');     // コメントアウト
$table->uuid('id')->primary(); // uuidに変更

マイグレーションファイルをいちどロールバックして再実行します

php artisan migrate:rollback
php artisan migrate

● その他にも ULID を生成するライブラリ symfony/uid というのがあります

● PHP7.3の場合は次のバージョンをインストールします

composer require symfony/uid:5.4.21

● PHP8.1以上の場合は最新バージョンをインストールします

use Symfony\Component\Uid\Ulid;

$ulid = new Ulid();  // e.g. 01AN4Z07BY79KA1307SR9X4MV3
No.2060
07/04 11:21

edit