无法为 Laravel 中的关系播种数据库 table
Unable to seed db table with relationship in Laravel
在 laravel 5.8 应用程序中,我想播种用户和产品 table。用户和产品之间存在这样的关系
User.php型号(用户可以拥有一个或多个产品)
public function products()
{
return $this->hasMany(Product::class, 'user_id');
}
Product.php模型(一个产品可以属于一个或多个用户)
public function users()
{
return $this->belongsToMany(User::class);
}
我正在尝试使用下面的 UsersTableSeeder
同时为用户 table 和产品 table 播种
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
时,只有用户 table 被播种,我得到这个错误
Symfony\Component\Debug\Exception\FatalThrowableError : Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, instance of
Illuminate\Database\Eloquent\Collection given, called in C:\Users\Elomena\Projects\Clients\Pramopro\database\seeds\UsersTableSeeder.php on line 15
这是第 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());
});
}
错误消息表明您使用的是集合而不是模型。
错误是由这个函数引起的,它returns是一个集合而不是模型,因为它是一个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
}
在 laravel 5.8 应用程序中,我想播种用户和产品 table。用户和产品之间存在这样的关系
User.php型号(用户可以拥有一个或多个产品)
public function products()
{
return $this->hasMany(Product::class, 'user_id');
}
Product.php模型(一个产品可以属于一个或多个用户)
public function users()
{
return $this->belongsToMany(User::class);
}
我正在尝试使用下面的 UsersTableSeeder
同时为用户 table 和产品 table 播种
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
时,只有用户 table 被播种,我得到这个错误
Symfony\Component\Debug\Exception\FatalThrowableError : Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, instance of Illuminate\Database\Eloquent\Collection given, called in C:\Users\Elomena\Projects\Clients\Pramopro\database\seeds\UsersTableSeeder.php on line 15
这是第 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());
});
}
错误消息表明您使用的是集合而不是模型。
错误是由这个函数引起的,它returns是一个集合而不是模型,因为它是一个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
}