人気の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
No.2060
11/15 09:42

edit