Laravel [8.x] 不啟用外鍵檢查

資料表有設定關聯時,如果要刪除或清空資料表時會出現 Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint 錯誤,即使關聯是設定 cascade,還是會觸發。

如果使用 phpMyAdmin 操作會有一個「啟用外鍵檢查」的 checkbox 可以選擇。

在程式裡則可以使用 disableForeignKeyConstraints 和 enableForeignKeyConstraints 兩個 function 來切換。
例如要清空角色和權限的對應表,先用 disableForeignKeyConstraints 關閉外鍵檢查,執行完想執行的操作後,再用 enableForeignKeyConstraints 開啟外鍵檢查讓設定恢復原狀。
  1. use DB;
  2. use Illuminate\Support\Facades\Schema;
  3.  
  4. Schema::disableForeignKeyConstraints();
  5. DB::table('permission_role')->truncate();
  6. Schema::enableForeignKeyConstraints();

留言