MariaDB SQL 轉 Laravel 遷移提示詞

請將此 SQL 轉為 Laravel migration,並遵循以下規則:

  1. 使用 Laravel 新的匿名類別 migration 語法
  2. $table 鏈式呼叫各函數的順序,按照 raw SQL 語句的構成順序排列,如 DEFAULT CURRENT_TIMESTAMP() 排在 nullable() 之前
  3. DEFAULT CURRENT_TIMESTAMP() 轉為 useCurrent(),但 CURRENT_TIMESTAMP(3) 之類有限定精度的可以用 DB::raw
  4. TIMESTAMP(3) 這種有精度的欄位,使用 timestamp() 方法,不要用 dateTime() 方法
  5. SQL TIMESTAMP 沒有精度的,遷移中 timestamp() 方法 precision 參數不必帶 0,保留預設值 null 即可
  6. 除必要狀況外,UNSIGNED 一律轉換為 unsignedIntegerunsignedSmallInteger 等方法,不轉為單獨的 unsigned() 方法
  7. 所有的 unsigned*Integer()->autoIncrement()->primary() 都簡化成 *Increments() 方法
  8. *Integer 等方法的第二個參數是 $autoIncrement,不要把欄位長度放在這裡
  9. 針對單一欄位的索引,一律加在該欄位語句的最後,不獨立成行,如 $table->string('DEVICE_ID', 50)->comment('設備識別碼')->index('DEVICE_ID');
  10. 針對單一欄位的 unique 索引,比照 6 的處理方式
  11. 針對單一欄位的 primary() 方法,也比照 6 的處理方式
  12. $table->charset('utf8mb4') 的返回型態為 void,所以 $table->charset('utf8mb4')->collation('utf8mb4_unicode_ci'); 這種莫名其妙的鏈式呼叫不要出現
  13. $table->foreign() 現在支持第 2 個參數 name,所以外鍵的名稱可以放在 foreign() 的第 2 個參數(不是 name() 方法!)
  14. CHECK (JSON_VALID()) 的欄位,使用 ->json() 方法
  15. 資料表本身若有 comment,務必包括(用 $table->comment() 單行)
  16. up 中的程式碼區塊,欄位、(單行寫的)索引、外鍵、 table comment 等,請用一個空行隔開,例如:
    public function up(): void
    {
        Schema::create('DATA_BankCard', function (Blueprint $table) {
            $table->bigIncrements('BANK_CARD_SEQ')->comment('銀行卡序號');
            $table->string('BANK_CARD_ID', 40)->charset('utf8mb4')->comment('銀行卡代號');
            $table->bigInteger('PLATFORM_ID')->comment('平台代號(依據ZoneSetinfo分組為主)');
    
            $table->primary(['CODE_KIND', 'CODE_ID', 'LANGUAGE']);
            $table->index(['DELETE_FAG', 'ZONE_CODE', 'SET_NUM'], 'IX_DATA_BankCard_SEQ_ID_POSITION_CODE');
            $table->index(['ZONE_CODE', 'SET_NUM'], 'ZONE_CODE');
            $table->unique(['BANK_CODE', 'WECHAT_BANK_NAME', 'LEVEL_2_SCRIPT'], 'UK_BANK_CODE_WECHAT_BANK_NAME_LEVEL_2_SCRIPT');
    
            $table->foreign(['ZONE_CODE', 'SET_NUM'], 'DATA_BankCard_ibfk_4')->references(['ZONE_CODE', 'SET_NUM'])->on('DATA_ZoneSetInfo');
    
            $table->comment('銀行卡');
        });
    }