🔑
Laravel でユニーク制約つけたら unique key が長すぎてマイグレーションできなかった件
状況
-
ユニーク制約かけたい.
-
マイグレーション実行したらエラーが出た.
マイグレーションファイル
$table->unique(['hogehoge_id', 'fugafuga_piyopiyo_id']);
動かしたらエラーが出た.
SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'hogehoge_user_id_fugafuga_piyopiyo_user_id_unique' is too long ...
長すぎるってさ(´・ω・`)
解決策
ユニーク制約に名前をつけるといける.名前をつけないと Laravel 側で決めたルールに従って名前が決まるため,長すぎてエラーになることがある.
$table->unique(['hogehoge_id', 'fugafuga_piyopiyo_id'])->name("hogehoge_id_fugafuga_piyopiyo_id_unique");
追記
外部キー制約が長すぎてもエラーが発生する.ここでも名前をつけることで対応できる.
$table->foreignId('hoge_fuga_piyo_id')->constrained()->cascadeOnDelete()->name('hoge_fuga_piyo_id');
まとめ
テーブル名やカラム名が長いときは名前をつけておくとスムーズにいけるぞ!
以上だ( `・ω・)b
Discussion