[英]Unable to seed db table with relationship in Laravel
在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
,僅php artisan db:seed
了users表,並且出現此錯誤
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());
});
}
該錯誤消息表明您使用的是集合而不是模型。
該錯誤是由該函數引起的,它返回一個集合而不是一個模型,因為它是一個hasMany
關系。
public function products()
{
return $this->hasMany(Product::class, 'user_id');
}
因此,您應該將播種器更改為saveMany
而不是save
。
public function run()
{
factory(App\User::class, 3)->create()->each(function ($user) {
$user->products()->saveMany(factory(App\Product::class, 3)->create());
}); // ^ saveMany instead of save
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.