Фабрика Laravel не может спасти отношения
Я использую 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 ответ
Ваш код может нуждаться в небольшом рефакторинге, так как вы можете неправильно составлять цепочки при создании моделей:
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
,