【Laravel】migrationでunique keyの名前が長すぎるとエラーが出てしまう場合の対処法
こんにちは。
ニシザワです。
本日はLaravelのmigrationでunique keyの名前が長すぎるので怒られてしまう場合の対処法を書きます。
下記のようなエラーが出た場合の対処法です。
上記は下記のようなunique keyを貼った場合に出てしまいます。
ここで
Laravelは自動的に<?table名>_<?ユニークキー>_uniqueという形で名前をつけてくれるのですが
これのせいで、unique key名画長くなりエラーが起こってしまいます。
そのため、名前を新たに上書きしてしまえば問題ないです。
解決法は下記です。
よく、エラーが起こってしまうところだと思いますので、参考にしてみてください。
ニシザワです。
本日はLaravelのmigrationでunique keyの名前が長すぎるので怒られてしまう場合の対処法を書きます。
下記のようなエラーが出た場合の対処法です。
SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'us
er_destination_address_counts_user_id_destination_address_id_unique' is too
long (SQL: alter table `user_destination_address_counts` add unique `user_
destination_address_counts_user_id_destination_address_id_unique`(`user_id`
, `destination_address_id`))
上記は下記のようなunique keyを貼った場合に出てしまいます。
<?php
public function up()
{
Schema::create('user_destination_address_counts', function (Blueprint $table) {
$table->increments('id')->comment("ID");
$table->unsignedInteger("user_id")->comment("ユーザーID");
$table->unsignedInteger("destination_address_id")->comment("送付先ID");
$table->unsignedInteger("count")->comment("注文数");
$table->timestamps();
$table->unique(["user_id","destination_address_id"]);
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
$table->foreign('destination_address_id')
->references('id')->on('destination_addresses')
->onDelete('cascade');
});
}
ここで
<?php
$table->unique(["user_id","destination_address_id"]);
が原因になっています。Laravelは自動的に<?table名>_<?ユニークキー>_uniqueという形で名前をつけてくれるのですが
これのせいで、unique key名画長くなりエラーが起こってしまいます。
そのため、名前を新たに上書きしてしまえば問題ないです。
解決法は下記です。
<?php
$table->unique(["user_id","destination_address_id"])->name("user_id_destination_address_id_unique");
上記のようにnameで繋げば名前を上書き可能です。よく、エラーが起こってしまうところだと思いますので、参考にしてみてください。