2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel11 Eloquent の主キー(ID)を UUID に変更する

Last updated at Posted at 2024-10-06

目的

以前、 goldspecdigital/laravel-eloquent-uuid ライブラリを利用して主キーをUUIDに変更する記事を書いていました。

https://qiita.com/ucan-lab/items/a8374ba421fe7828dcb9

Laravel9以降は HasUuids トレイトが利用できるようになりました!

ということでやっていきます。

環境

  • PHP: 8.3.11
  • Laravel: 11.23.5

UUID とは

Universally Unique Identifierの略。
重複する可能性が無視できるほど小さく、一意な識別子として扱えるIDです。

生成方法によりバージョン1からバージョン5までの種類があり、今回使用するのはバージョン4になります。

UUID のメリット

  • IDにID以外の意味を持たせないため
  • 複数のデータベースで分散してデータを持つ場合に有用
  • データを移行の際にもプライマリーキーの重複を避けられる
  • URLからIDの予測が付きにくい

手順

users マイグレーションを修正する

database/migrations/0001_01_01_000000_create_users_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            // $table->id();
            $table->uuid('id')->primary(); // 追記
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password')->nullable();
            $table->string('avatar')->nullable();
            $table->string('google_id')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });

        // ...
    }
};

User モデルを修正する

HasUuids トレイトをモデルに追加します。

app/Models/User.php
class User extends Authenticatable
{
    use HasFactory, HasUuids, Notifiable; // 追記

    // ...
}

データベースの再生成

$ php artisan migrate:fresh --seed

動作確認

users テーブルの id カラムが uuid になっていることを確認します。

$ php artisan tinker

> App\Models\User::first()
= App\Models\User {#6174
    id: "9d2e8ce1-e7c5-46f5-91a8-ade9a7c296ba",
    name: "小泉 洋介",
    email: "gsuzuki@example.org",
    email_verified_at: "2024-10-07 01:36:16",
    #password: "$2y$12$h7pTeIY73t9IxlH97ridZeNDplh1qYHEdNc5IWlUhWBX1A7PdbwuC",
    avatar: "https://via.placeholder.com/640x480.png/008866?text=neque",
    google_id: "6746",
    #remember_token: "ctzEykq0O7",
    created_at: "2024-10-07 01:36:16",
    updated_at: "2024-10-07 01:36:16",
  }
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?