0
0

Laravel にてユニットテスト実行時、DBの外部キー制約を無効化する

Posted at

よく忘れるのでメモ

というか調べていて初めて知りましたが、いつの間にやら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();
}

参考

というか普通にマイグレーションのドキュメントに書いてあった!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0