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.