今天遇到錯誤訊息耽誤了很久:
... foreign key constraint 'xxx_id_foreign' are incompatible.
錯誤訊息沒有詳細列出可能的錯誤,追了很久才知道有一些地方要注意。
Nullable
如果有設定 onDelete('SET NULL')
時,必須要注意欄位定義時,是否有設定可為 NULL:
$table->bigInteger('xxx_id')->nullable();
如果欄位是 NOT NULL
則 MySQL 會自動判斷 key constraint 無法實現。
Unsigned (無號數)
另外在 Laravel migration 中 ->id()
的資料型態相當於 ->bigInteger()->unsigned()
,因此如果 foreign key column 的資料型態互不相同,也會造成 in complete
的錯誤訊息。