Men*_*ena 1 php laravel laravel-5.8
在laravel 5.8应用程序中,我想为用户和产品表添加种子。这样的用户和产品之间存在联系
User.php模型(用户可以拥有一个或多个产品)
public function products()
{
return $this->hasMany(Product::class, 'user_id');
}
Run Code Online (Sandbox Code Playgroud)
Product.php模型(一种产品可以属于一个或多个用户)
public function users()
{
return $this->belongsToMany(User::class);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用UsersTableSeeder以下内容同时播种用户表和产品表
public function run()
{
factory(App\User::class, 3)->create()->each(function ($user) {
$user->products()->save(factory(App\Product::class, 3)->make());
});
}
Run Code Online (Sandbox Code Playgroud)
而“ DatabaseSeeder”看起来像这样
public function run()
{
$this->call(UsersTableSeeder::class);
}
Run Code Online (Sandbox Code Playgroud)
当我运行命令时php artisan db:seed,仅种子用户表,并且出现此错误
Symfony \ Component \ Debug \ Exception \ FatalThrowableError:传递给Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()的参数1必须是Illuminate \ Database \ Eloquent \ Model的实例,Illuminate \ Database \ Eloquent \ Collection的实例给定,在第15行的C:\ Users \ Elomena \ Projects \ Clients \ Pramopro \ database \ seeds \ UsersTableSeeder.php中调用
这是第15行 $user->products()->save(factory(App\Product::class, 3)->make());
我真的不明白为什么会收到这个错误,因为我已经遵循了https://laravel.com/docs/5.8/seeding#using-model-factories中的确切内容
请如何播种关系?
这可以解决您的问题:
public function run()
{
factory(App\User::class, 3)->create()->each(function ($user) {
$user->products()->saveMany(factory(App\Product::class, 3)->create());
});
}
Run Code Online (Sandbox Code Playgroud)