Laravel

LaravelでUUIDを使う!注意点も解説します

みなさん、こんにちは。どんぶラッコです。

本日は、LaravelのIDをUUIDにする手順をご紹介します。

グランくん
グランくん
UUIDって何?
どんぶラッコ
どんぶラッコ
Universally Unique Identifier の略語です。
550e8400-e29b-41d4-a716-446655440000 みたいな、16進法の文字列で表現されるIDのことで、世界中で重複しない一意のIDのことです。

今回は、そんなUUIDをLaravelで実装する手順と気をつける点についてお伝えします!

laravel-eloquent-uuid をインストール

今回は laravel-eloquent-uuid パッケージを利用します。

まずは composer を使ってインストールをします。

Laravelのバージョンに合わせてパッケージのバージョンを変更する必要があります。

LaravelThis package
v5.8.*v1.*
v6.*v6.*
v7.*v7.*
v8.*v8.*

例えば、Laravel8を使っているならば、

composer require goldspecdigital/laravel-eloquent-uuid:^8.0

とインストールすれば良い、ということです。

Migrationファイルを書き換える

次に、UUIDを適用したいMigrationファイルを書き換えます。ポイントは primary() でプライマリキーに指定することですね。

<?php

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

class CreateSampleTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('minutes', function (Blueprint $table) {
//            $table->id();
            $table->uuid('id')->primary();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('sample');
    }
}

Modelの書き換え

通常のLaravelModelクラス の代わりに、 GoldSpecDigital\LaravelEloquentUUID\Database\Eloquent\Model を使うように、とのことです。

<?php

namespace App\Models;

use GoldSpecDigital\LaravelEloquentUUID\Database\Eloquent\Model;

class BlogPost extends Model
{
    //
}

注意: 外部キーを設定する時…

基本的にはこれだけです!

注意すべき点としては、Migrationファイルで外部キー設定をする時です。Laravel7から導入された foreignId()を使うとエラーになってしまいます。

$table->foreignId('sample_id');
// この書き方はエラー

公式の説明を読むと、foreignId()数値のIDに対して 外部キーを設定する糖衣構文です。

uuidは文字列なので、エラーが発生してしまうのです。

どんぶラッコ
どんぶラッコ
sqliteで開発をテストしている方はエラーが出ません。私もsqliteで実験してからmysql環境に移行して「あれ…動かない…」となりました。。

なので、ここは従来の方法で外部キー設定を実施してあげましょう。

$table->uuid('sample_id');
$table->foreign('sample_id')->references('id')->on('samples');

以上、設定の方法でした!

みなさんも試してみてください♪

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
RELATED POST

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です