簡體   English   中英

無法在Laravel中為具有關系的數據庫表播種

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM