Laravel 工厂无法保存关系
Laravel Factory Can't Save Relation
我使用 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());
})
);
});
都是hasMany关系。
这样做,我有这个错误:
General error: 1364 Field 'merchant_id' doesn't have a default value
(SQL: insert into stores
....)
好像我的第一个 $stores->save( ... ) 没有使用创建的商家。
在我的数据库中,我创建了一个商家。
如果我使用 ->make()
而不是 ->create()
,它适用于商店,但我无法保存产品,因为它没有持久化...
像这样在工厂中可以使用多次保存吗?
您的代码可能需要进行一些重构,因为您可能错误地链接了模型的创建:
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
实例。我不认为只创建 一个 商家会 return 一个集合。在示例中,我们创建 2 merchents
.
我使用 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());
})
);
});
都是hasMany关系。
这样做,我有这个错误:
General error: 1364 Field 'merchant_id' doesn't have a default value (SQL: insert into
stores
....)
好像我的第一个 $stores->save( ... ) 没有使用创建的商家。
在我的数据库中,我创建了一个商家。
如果我使用 ->make()
而不是 ->create()
,它适用于商店,但我无法保存产品,因为它没有持久化...
像这样在工厂中可以使用多次保存吗?
您的代码可能需要进行一些重构,因为您可能错误地链接了模型的创建:
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
实例。我不认为只创建 一个 商家会 return 一个集合。在示例中,我们创建 2 merchents
.