よく忘れるのでメモ
というか調べていて初めて知りましたが、いつの間にやらLaravel標準で用意してくれていた模様
use Illuminate\Support\Facades\Schema;
// 外部キー制約を無効化
Schema::disableForeignKeyConstraints();
// 外部キー制約を有効化
Schema::enableForeignKeyConstraints();
以前のやり方
利用しているのが MySQL だったので問題ありませんでしたが、どうやら PostgreSQL では動かないようで…
やはりLaravel標準で用意されていたらそれを使うに限りますね
use Illuminate\Support\Facades\DB;
// 外部キー制約を無効化
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
// 外部キー制約を有効化
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
改めて使い方
別に setUp() メソッド以外でもいいのですが、各テストファイルで
public function setUp(): void
{
parent::setUp();
Schema::disableForeignKeyConstraints();
// 外部キーを無効化しているうちに
// Factory() なり insert() なり update() なり save() なりでデータを突っ込む
Schema::enableForeignKeyConstraints();
}
参考
というか普通にマイグレーションのドキュメントに書いてあった!