テーブル列のデフォルトとして関数名を指定すると、これは引用符で囲まれるため、実行時に関数は実行されず、文字列として保存されます。
幸い、UUID列にはこのタイプのデフォルトの文字列値を設定できないため、エラーが発生します。
Schema::create('products', function(Blueprint $table)
{
$table->uuid('id')->default('gen_random_uuid()')->primary('products_pkey');
$table->string('name')->nullable();
$table->string('max_projects')->nullable();
$table->timestamps();
$table->softDeletes();
});
DB::raw
試してみてください:
$table->uuid('id')->default(DB::raw('gen_random_uuid()'))->primary('products_pkey');
MySQLでは関数をデフォルト値として使用することはできません。 定数でなければなりません。 UUIDを生成するには、トリガーを使用するか、手動で実行する必要があります。
gen_random_uuid()
はPostgre関数です。
最も参考になるコメント
DB::raw
試してみてください: