如何在Laravel中使用Faker填充嵌套的类别表?

如何在Laravel中使用Faker填充嵌套的类别表?,laravel,laravel-5,model,faker,laravel-seeding,Laravel,Laravel 5,Model,Faker,Laravel Seeding,我想把子类别id放入报价表,但它似乎太复杂了!这是我的尝试,显然它以一个循环结束 这是播种机: public function run() { factory(App\User::class, 50)->create()->each(function ($u) { $u->quotes()->save( factory(App\Quote::class)->make() ); }); }

我想把子类别id放入报价表,但它似乎太复杂了!这是我的尝试,显然它以一个循环结束

这是播种机:

public function run()
{
    factory(App\User::class, 50)->create()->each(function ($u) {

        $u->quotes()->save(
            factory(App\Quote::class)->make()
        );

    });
}
和报价工厂:

return [
    'text' => $faker->paragraph,
    'author_id' => factory('App\Author')->create()->id,
    'category_id' => factory('App\Category')->create()->id
];
类别工厂:

return [
    'name' => $faker->text,
    'parent_id' => factory('App\Category')->create()->id
];

只要您使用的是Laravel>=5.3,我建议您使用

对于默认类别工厂,请将父级id设置为空,例如

$factory->define(App\Category::class, function (Faker $faker) {
    return [
        'name'      => $faker->text,
        'parent_id' => null
    ];
});
然后可以添加状态工厂以包括父类别:

$factory->state(App\Category::class, 'child', function ($faker) {
    return [
        'parent_id' => factory('App\Category')->create()->id,
    ];
});
要使用状态,您只需使用状态名称链接一个名为
states()
的方法,例如

factory(App\Category::class)->states('child')->make();


如果你使用的是Laravel,有什么问题?你使用的是什么版本的Laravel?@dwjohnston我想这是一个无限循环。Thanx用于添加有关闭包的信息,非常有用!
$parent = factory(App\Quote::class)->create();
$u->quotes()->save(
    factory(App\Quote::class)->make(['parent_id' => $parent->id])
);
'parent_id' => function () {
   return factory('App\Category')->create()->id;
}