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 開啟外鍵檢查讓設定恢復原狀。
如果使用 phpMyAdmin 操作會有一個「啟用外鍵檢查」的 checkbox 可以選擇。
在程式裡則可以使用 disableForeignKeyConstraints 和 enableForeignKeyConstraints 兩個 function 來切換。
例如要清空角色和權限的對應表,先用 disableForeignKeyConstraints 關閉外鍵檢查,執行完想執行的操作後,再用 enableForeignKeyConstraints 開啟外鍵檢查讓設定恢復原狀。
- use DB;
- use Illuminate\Support\Facades\Schema;
- Schema::disableForeignKeyConstraints();
- DB::table('permission_role')->truncate();
- Schema::enableForeignKeyConstraints();
留言
張貼留言