表結構遷移檔案Identifier name 'xxxxxx' is too long解決

Cracker發表於2021-04-13

使用表結構生成工具自動生成遷移檔案我用的擴充套件包是 kitloong/laravel-migrations-generator

  • 使用命令根據資料庫結構生成遷移檔案

    php artisan migrate:generate
  • 在遷移的時候報錯識別符號名稱太長

    SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'circle_collections_subscribe_circle_collection_id_member_id_primary' is too long (SQL: alter table `circle_collections_subscribe` add primary key `circle_collections_subscribe_circle_collection_id_member_id_primary`(`circle_collection_id`, `member_id`))
  • 由於沒有自定義識別符號的名稱加上表名稱又太長,拼接後的名稱這麼長確實有點過分

    circle_collections_subscribe_circle_collection_id_member_id_primary

    使用表結構遷移檔案建立表報錯 SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'xxxxxx' is too long 解決

參考Laravel migration primary (or key) “Identifier name is too long”

  • 找到報錯的遷移檔案
      public function up()
      {
          Schema::create('circle_collections_subscribe', function (Blueprint $table) {
              $table->unsignedInteger('circle_collection_id');
              $table->unsignedInteger('member_id')->index('circle_collections_subscribe_member_id');
              $table->primary(['circle_collection_id', 'member_id']);
          });
      }
  • 由於這邊沒有定義識別符號的名稱所以會自動拼接,名稱過長導致遷移失敗。
    $table->primary(['circle_collection_id', 'member_id']);
  • 只需要在裡面自定義個短一點的名稱就可以了
    $table->primary(['circle_collection_id', 'member_id'],"circle_collections_subscribe_primary");
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章