无法在Laravel中为具有关系的数据库表播种

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中的确切内容

请如何播种关系?

Mes*_*uti 5

这可以解决您的问题:

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)