Laravel工厂无法保存关系

时间:2018-12-17 12:02:24

标签: laravel laravel-seeding

我使用Laravel 5.6,而我的播种机有问题。

我用这个:

factory(\App\Models\Merchant::class)->create([
    'email' => 'admin@domain.com',
])->each(function ($m) {
    $m->stores()->save(factory(\App\Models\Store::class)->create()
        ->each(function ($s) {
            $s->products()->save(factory(\App\Models\Product::class, 10)->create());
        })
    );
});

所有都是有很多种关系。

这样做,我遇到这个错误:

  

一般错误:1364字段“ merchant_id”没有默认值   (SQL:插入stores...。)

这就像我的第一个 $ stores-> save(...)不使用创建的商人一样。

在我的数据库中,我创建了一位商人。

如果我使用->make()而不是->create(),则它适用于商店,但是我不能保存产品,因为它不能持久保存...

是否可以在这样的工厂中使用多个保存?

1 个答案:

答案 0 :(得分:2)

您的代码可能需要一点重构,因为您可能错误地链接了模型的创建:

factory(\App\Models\Merchant::class, 2)->create([
    'email' => 'admin@domain.com',
])->each(function ($m) {
    $store = factory(\App\Models\Store::class)->create(['merchent_id' => $m->id]);
    factory(\App\Models\Product::class, 10)->create(['store_id' -> $store->id]);
    );
});

注意:要使用->each()方法,您需要有一个collection实例。我认为仅创建一个商家不会返回收藏集。在示例中,我们创建2个merchents