composer require webpatser/laravel-uuid
マイグレーションファイルに次のように uuid 型のカラムを追加します
( 実際には CHAR(36)として作成されます )
ユニーク制約をつける場合
$table->uuid('uuid')->after('id')->unique()->comment('uuid');
nullを許可する場合
$table->uuid('uuid')->after('id')->nullable()->comment('uuid');
/app/UuidTrait.php
<?php
namespace App;
use Webpatser\Uuid\Uuid;
trait UuidTrait
{
public static function bootUuidTrait()
{
static::creating(function ($model) {
$model->uuid = Uuid::generate()->string;
});
}
}
モデルファイルに以下を追加
use \App\UuidTrait;
Route::get("posts/share/{uuid}", "MemoController@share")->name('posts.share')->where([ 'id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' ]);
/posts/share/05eface0-edc911eb-bfda-2f6c633e3f11 というようなURLでアクセスすることができます