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
]);
});
}
}