LoginSignup
0
0

More than 1 year has passed since last update.

Factoryで生成されるUserのidに合わせて他テーブルのFactoryを生成する方法

Last updated at Posted at 2023-01-28

Factoryで生成されるUserテーブルのidと他テーブルのuser_idカラムと紐付けしたかったのでその備忘録です

ItemFactoryの作成

UserFactryは既存のものを使用します。
ItemFactoryを生成する時は事前にuser_idのカラムがあるテーブルをマイグレーションしてください

コメントアウトをしている'user_id'=>$this->faker->numberBetween(1,10)は1~10のランダムな数字を生成することで10人のUserのidに対応するように最初記述したのですが、これでは10人以上のUserがFactoryされた時に対応ができないので、その対処法を考えます。

ItemFacrtory
class ItemFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {

        return [
            //'user_id'=>$this->faker->numberBetween(1,10),
        ];
    }
}

Seederの作成

Userを10人生成します。そこにeach()を使用することで、User一人に対して,3つのItemを生成します。そのタイミングで'user_id'のカラムをUserのidと紐づけます。

これによって、Userが生成されるタイミングで、user_idとidを紐づけることで,10人以降のUserと紐付かないという問題が解消されます。

seeder
class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        \App\Models\User::factory(10)->create()->each(function($user){
            \App\Models\Item::factory(3)->create([
                'user_id' =>$user->id
            ]);
        });
    }
}
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