Laravel - Seeding Relationships

前端 未结 6 504
感情败类
感情败类 2020-12-07 14:58

In Laravel, database seeding is generally accomplished through Model factories. So you define a blueprint for your Model using Faker data, and say how many instances you ne

6条回答
  •  有刺的猬
    2020-12-07 15:48

    You can do this using closures within the ModelFactory as discussed here.

    This solution works cleanly and elegantly with seeders as well.

    $factory->define(App\User::class, function (Faker\Generator $faker) {
        return [
            'name' => $faker->name,
            'email' => $faker->email,
            'password' => bcrypt(str_random(10)),
            'remember_token' => str_random(10),
        ];
    });
    
    $factory->define(App\Post::class, function (Faker\Generator $faker) {
        return [
            'name' => $faker->name,
            'body' => $faker->paragraph(1),
            'user_id' => function() {
                return factory(App\User::class)->create()->id;
            },
        ];
    });
    

    For your seeder, use something simple like this:

    //create 10 users
    factory(User::class, 10)->create()->each(function ($user) {
        //create 5 posts for each user
        factory(Post::class, 5)->create(['user_id'=>$user->id]);
    });
    

    NOTE: This method does not create unneeded entries in the database, instead the passed attributes are assigned BEFORE the creation of associated records.

提交回复
热议问题