0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】CUIDをシーディングまで導入してみる 

Last updated at Posted at 2024-07-31

CUIDとは?

衝突しにくいユニークな識別子を生成するための手法。
時系列性があり、ソートで並べることが可能。

前提

  • Laravelのセットアップは済んでいるものとする

動作環境・使用するツールや言語

  • OS バージョン
    • Windows11
  • ツール
    • VSCode
  • 言語
    • PHP 8.1
  • フレームワーク
    • Laravel8

パッケージのインストール

今回は、こちらのパッケージを使用しました。

PHPコンテナ内
composer require visus/cuid2
  • インストール成功すると、vendor\visus\cuid2\srcファイル等が自動作成される

マイグレーションファイル

create_users_table.php
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->string('cuid', 25)->primary()->unique();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }
  • idは今回無しで、cuidをプライマリーキーとしてユニーク使用。

モデル

User.php
use Visus\Cuid2\Cuid2;

class User extends Authenticatable
{
    ~~
    protected $fillable = [
        'name',
        'email',
        'password',
    ];
    
    // 今回はcuidが主キーなので使用するので、主キーが文字列ですよ宣言
    protected $keyType = 'string';
    // 今回はcuidが主キーなので、主キーを自動的にインクリメントしないで宣言
    public $incrementing = false;

    /**
     * モデルのイベントライフサイクルをカスタマイズするためのメソッド。
     * 
     * このメソッドは、モデルがデータベースに保存される前に呼び出され、
     * 新しく作成されるモデルインスタンスに対して'cuid' フィールドが必ず設定される。
     */
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            if (empty($model->cuid)) {
                $cuid = new Cuid2();
                $model->cuid = $cuid->toString();
            }
        });
    }
    ~~
}

シーダーファイル

UserTabelSeeder.php
use Illuminate\Support\Facades\Hash;
use App\Models\User;

class UserTableSeeder extends Seeder
{
    public function run()
    {
        $users = [
            [
                'name' => 'AAA',
                'email' => 'a@example.com',
                'password' => Hash::make('passwordA'),
            ],
            [
                'name' => 'BBB',
                'email' => 'b@example.com',
                'password' => Hash::make('passwordB'),
            ],
            [
                'name' => 'CCC',
                'email' => 'c@example.com',
                'password' => Hash::make('passwordC'),
            ],
        ];
        // foreachでUserモデルのboot()を繰り返し呼び出し、cuidをそれぞれ設定
        foreach ($users as $user) {
            User::create($user);
        }
    }
}

その後、DatabaseSeeder.phpにUserTabelSeeder.phpを登録。

結果

PHPコンテナ内
php artisan make:migrate --seed

を実行すると、

スクリーンショット (145).png

見事cuidでデータが生成、保存されていました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?