MariaDB SQL 轉 Laravel 遷移提示詞
請將此 SQL 轉為 Laravel migration,並遵循以下規則:
- 使用 Laravel 新的匿名類別 migration 語法
$table鏈式呼叫各函數的順序,按照 raw SQL 語句的構成順序排列,如DEFAULT CURRENT_TIMESTAMP()排在nullable()之前DEFAULT CURRENT_TIMESTAMP()轉為useCurrent(),但CURRENT_TIMESTAMP(3)之類有限定精度的可以用DB::raw- 像
TIMESTAMP(3)這種有精度的欄位,使用timestamp()方法,不要用dateTime()方法 - SQL
TIMESTAMP沒有精度的,遷移中timestamp()方法precision參數不必帶0,保留預設值null即可 - 除必要狀況外,
UNSIGNED一律轉換為unsignedInteger、unsignedSmallInteger等方法,不轉為單獨的unsigned()方法 - 所有的
unsigned*Integer()->autoIncrement()->primary()都簡化成*Increments()方法 *Integer等方法的第二個參數是$autoIncrement,不要把欄位長度放在這裡- 針對單一欄位的索引,一律加在該欄位語句的最後,不獨立成行,如
$table->string('DEVICE_ID', 50)->comment('設備識別碼')->index('DEVICE_ID'); - 針對單一欄位的 unique 索引,比照 6 的處理方式
- 針對單一欄位的
primary()方法,也比照 6 的處理方式 $table->charset('utf8mb4')的返回型態為void,所以$table->charset('utf8mb4')->collation('utf8mb4_unicode_ci');這種莫名其妙的鏈式呼叫不要出現$table->foreign()現在支持第 2 個參數name,所以外鍵的名稱可以放在foreign()的第 2 個參數(不是name()方法!)- 有
CHECK (JSON_VALID())的欄位,使用->json()方法 - 資料表本身若有 comment,務必包括(用
$table->comment()單行) 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('銀行卡'); }); }