みなさん、こんにちは。どんぶラッコです。
本日は、LaravelのIDをUUIDにする手順をご紹介します。
550e8400-e29b-41d4-a716-446655440000
みたいな、16進法の文字列で表現されるIDのことで、世界中で重複しない一意のIDのことです。今回は、そんなUUIDをLaravelで実装する手順と気をつける点についてお伝えします!
laravel-eloquent-uuid をインストール
今回は laravel-eloquent-uuid
パッケージを利用します。
まずは composer を使ってインストールをします。
Laravelのバージョンに合わせてパッケージのバージョンを変更する必要があります。
Laravel | This 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は文字列なので、エラーが発生してしまうのです。
なので、ここは従来の方法で外部キー設定を実施してあげましょう。
$table->uuid('sample_id');
$table->foreign('sample_id')->references('id')->on('samples');
以上、設定の方法でした!
みなさんも試してみてください♪