如何在Laravel上同时运行Seeder到多个相关表?

时间:2019-06-08 12:43:16

标签: php laravel

我正在创建3个表,它们相互关联,如下所示:

Template hasOne Attribute


Template hasOne Link

我想通过Template Seeder填充Attribute and Link表。 我尝试在Template工厂中插入两个函数以一次运行它,但是第二个函数不起作用,只有第一个函数可以正常工作。

我希望它一次全部运行。

这是我在工厂的代码:

factory(App\Models\Template\Eloquent\TemplateModel::class, 10)->create()->each(
    function ($template) {
        $template->links()->save(
            factory(App\Models\Template\Eloquent\TemplatelinkModel::class)->make()
        );
    },
    function ($template) {
        $template->attributes()->save(
            factory(App\Models\Template\Eloquent\TemplateattributeModel::class)->make()
        );
    }
);

该怎么做? 请一些身体帮助我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您仅应将一个回调函数用作Illuminate \ Support \ Collection-> each()函数的参数。在您的情况下,在作为回调发送给each()的同一个函数中使用两个保存操作就可以解决问题。

factory(App\Models\Template\Eloquent\TemplateModel::class, 10)->create()->each(
    function ($template) {
        $template->links()->save(
            factory(App\Models\Template\Eloquent\TemplatelinkModel::class)->make()
        );
        $template->attributes()->save(
            factory(App\Models\Template\Eloquent\TemplateattributeModel::class)->make()
        );
    }
);

有关如何使用each()和其他Collection函数的更多信息,请参见https://laravel.com/docs/5.8/collections