В приложении laravel 5.8 я хочу заполнить таблицу пользователей и продуктов.Между пользователями и продуктами существует такая связь, как эта модель
User.php (у пользователей может быть один или несколько продуктов)
public function products()
{
return $this->hasMany(Product::class, 'user_id');
}
модель Product.php (продукт может принадлежать одномуили больше пользователей)
public function users()
{
return $this->belongsToMany(User::class);
}
Я пытаюсь использовать UsersTableSeeder
ниже, чтобы заполнить таблицу пользователей и таблицу продуктов одновременно
public function run()
{
factory(App\User::class, 3)->create()->each(function ($user) {
$user->products()->save(factory(App\Product::class, 3)->make());
});
}
и 'DatabaseSeeder`выглядит так:
public function run()
{
$this->call(UsersTableSeeder::class);
}
Когда я запускаю команду php artisan db:seed
, только таблица пользователей заполняется, и я получаю эту ошибку
Symfony \ Component \ Debug \ Exception \ FatalThrowableError: Аргумент 1, передаваемый в Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save (), должен быть экземпляром Illuminate \ Database \ Eloquent \ Model, заданным экземпляром Illuminate \ Database \ Eloquent \ Collection, вызываемым в C: \ Users \Elomena \ Projects \ Clients \ Pramopro \ database \ seed \ UsersTableSeeder.php в строке 15
Это строка 15 $user->products()->save(factory(App\Product::class, 3)->make());
Я действительно не понимаю, почему я получаюэта ошибка, поскольку я следовал точному тhing from https://laravel.com/docs/5.8/seeding#using-model-factories
Пожалуйста, как сделать посев с отношениями?