Я пытаюсь добавить отношение к модели фабрики, чтобы сделать некоторые базы данных высева следующим образом - обратите внимание, что я пытаюсь добавить 2 сообщения для каждого пользователяАддиционных Laravel Factory Model
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class, 2)->make());
});
}
Но его выбрасывая следующую ошибку
Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::s
ave() must be an instance of Illuminate\Database\Eloquent\Model, instance
of Illuminate\Database\Eloquent\Collection given
Я думаю, что это как-то связано с сохранением коллекции. Если перезаписать код, вызвав каждую фабричную модель для отдельной записи, она, похоже, сработает. Очевидно, что это не очень элегантно, потому что, если я хочу сохранить 10 или пост для каждого пользователя, тогда мне придется декалировать 10 или строк, если я не использую какой-то цикл цикла.
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
$u->posts()->save(factory(App\Post::class)->make());
});
}
* ОБНОВЛЕНО *
Есть ли способ, чтобы гнездиться модель завода 3-го уровня вложенности?
public function run()
{
factory(App\User::class, 50)
->create()
->each(function($u) {
$u->posts()->saveMany(factory(App\Post::class, 2)
->make()
->each(function($p){
$p->comments()->save(factory(App\Comment::class)->make());
}));
});
}
Модели имеют метод с saveMany(), который принимает объекты сбора. Попробуйте '$ u-> posts() -> saveMany (factory (App \ Post :: class, 2) -> make());'. Однако имейте в виду, что это все равно сгенерирует 2 вопроса сохранения в фоновом режиме, оно не будет сохраняться с одним запросом. –
@ Yasen: работает метод saveMany(). Есть ли какой-либо способ развить модельный завод на 3-й уровень глубже? См. Обновленное сообщение о том, что я имею в виду. – adam78
Вы нашли решение более 2 уровней гнездования? –