開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel】migrationでunique keyの名前が長すぎるとエラーが出てしまう場合の対処法

【Laravel】migrationで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で繋げば名前を上書き可能です。
よく、エラーが起こってしまうところだと思いますので、参考にしてみてください。
TOPに戻る