首页 > 解决方案 > 如何用有关系的模型播种

问题描述

我有UserActivity模型。User hasMany关系到Activity(和一个Activity belongsTo only one User):

在用户模型中:

public function activities() {
    return $this->hasMany(Activity::class);
}

我想为用户提供相应的活动。我试过这个但没有奏效:

public function run()
{
    factory(App\User::class, 5)->create()->each(function ($user) {
        $user->activities()->saveMany(factory(App\Activity::class, 2)->make());
    });
}

活动工厂:

$factory->define(App\Activity::class, function (Faker $faker) {
    return [
        'title'        => $faker->text(50),
        'description'  => $faker->text(200)
    ];
});

我究竟做错了什么?

标签: phplaravel

解决方案


试试这个方法:

数据库/工厂/ActivityFactory.php

$factory->define(App\Activity::class, function (Faker\Generator $faker) {
    return [
        'user_id' => factory('App\User')->create()->id,
        'title'        => $faker->text(50),
        'description'  => $faker->text(200),
    ];
});

数据库/种子/ActivitySeeder.php

public function run()
{
    factory(App\Activity::class, 10)->create();
}

然后运行活动种子。

php artisan make:seeder ActivitySeeder

推荐阅读