LoginSignup
2
2

More than 3 years have passed since last update.

【Laravel】リレーションがある場合のファクトリによるテストデータの生成

Posted at

ファクトリでリレーションがあるモデルのテストデータを生成するパターンをメモしています。
公式リファレンス(データベースのテスト)

親子関係

User(親)->Movie(子)のように、二つのテーブル間の親子関係なら公式リファレンスにある方法で簡単にテストデータを生成できます。each()とモデルのリレーションメソッドを利用します。

factory(App\Models\User::class)
    ->create()
    ->each(function ($user) {
         $user->movies()->save(factory(App\Models\Movie::class)->make());
    });

親子孫関係

User(親)->Movie(子)->Review(孫)のように三つ以上のテーブル間に関係がある場合は上の方法をそのまま使うことはできません。なので外部キーとなる属性をオーバライドしてリレーションを構築します。

factory(App\Models\User::class)->create()->each(function ($user) {
    factory(App\Models\Movie::class)->create(['user_id' => $user->id])->each(function ($movie) {
        factory(App\Models\Review::class)->create(['movie_id' => $movie->id]);
    });
});
2
2
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
2
2