我使用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()
,则它适用于商店,但是我不能保存产品,因为它不能持久保存...
是否可以在这样的工厂中使用多个保存?
答案 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
。