亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel:有幾個種子表屬于使用工廠的關系

Laravel:有幾個種子表屬于使用工廠的關系

PHP
夢里花落0921 2023-04-28 13:58:09
長話短說:我正在使用 Laravel 和 Eloquent 并嘗試為數據庫播種并將多個屬于關系附加到一個表,但出現錯誤:調用未定義的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::attach()詳細解釋:我正在使用php 7.1和Laravel 6雄辯。我正在嘗試為測試數據庫播種。我有以下關系結構:一個用戶有多個帖子/一個帖子屬于一個用戶一個類別有多個帖子/一個帖子屬于一個類別用戶模型:class User extends Model{    protected $table = 'users';    public function posts()    {        return $this->hasMany('App\Models\Post');    }} 品類型號:class Category extends Model{    protected $table = 'categories';    public function posts()    {        return $this->hasMany('App\Models\Category');    }}帖子模型:class Post extends Model{    protected $table = 'posts';    public function category()    {        return $this->belongsTo('App\Models\Category');    }    public function user()    {        return $this->belongsTo('App\Models\User');    }}用戶工廠:$factory->define(User::class, function (Faker $faker) {    return [        'id' => $faker->unique()->randomNumber(3),        'name' => $faker->name(),    ];});分類工廠:$factory->define(Category::class, function (Faker $faker) {    return [        'id' => $faker->unique()->randomNumber(3),        'name' => $faker->word(),    ];});郵政工廠:$factory->define(User::class, function (Faker $faker) {    return [        'id' => $faker->unique()->randomNumber(3),        'name' => $faker->realText($maxNbChars = 200, $indexSize = 2),    ];});如果我只有用戶和帖子,我知道我可以通過以下方式為數據庫播種:public function seed(){    $users = factory(App\User::class, 10)        ->create()        ->each(function ($user) {            $user->posts()->createMany(factory(App\Post::class, 10)->make()->toArray());        });}但顯然這對我來說行不通。我嘗試了以下方法:public function seed(){    factory(User::class, 10)->create();    factory(Category::class, 10)->create();    factory(Post::class, 100)->create()->each(function ($post){        $post->user()->attach(User::all()->random(1));        $post->category()->attach(Category::all()->random(1));    });}但在這兩種情況下,我都收到錯誤:調用未定義的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::attach()
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

你必須使用associate():


public function seed()

{

    factory(User::class, 10)->create();

    factory(Category::class, 10)->create();

    factory(Post::class, 100)->make()->each(function ($post) {

        $post->user()->associate(User::inRandomOrder()->first());

        $post->category()->associate(Category::inRandomOrder()->first());

        $post->save();

    });

}

還將User::all()->random(1)返回一個集合而不是模型,這將引發異常,我將其替換為Model::inRandomOrder()->first(),它將從數據庫中獲取一個隨機模型。


從文檔:


更新 belongsTo 關系時,可以使用 associate 方法。此方法將在子模型上設置外鍵:


$account = App\Account::find(10);


$user->account()->associate($account);


$user->save();

更新


在您的模型工廠中:


/** @var Factory $factory */

$factory->define(Post::class, function (Faker\Generator $faker) {

    return [

        // not sure why you do this, is it not a autoincrement column?

        'id' => $faker->unique()->randomNumber(3), 

        'name' => $faker->realText($maxNbChars = 200, $indexSize = 2),

        'category_id' => function () {

            if ($category = Category::inRandomOrder()->first()) {

                return $category->id;

            }


            return factory(Category::class)->create()->id;

        },

        'user_id' => function () {

            if ($user = User::inRandomOrder()->first()) {

                return $user->id;

            }


            return factory(User::class)->create()->id;

        },

    ];

});

在你的播種機中:


public function seed()

{

    factory(User::class, 10)->create();

    factory(Category::class, 10)->create();

    factory(Post::class, 100)->create();

}


查看完整回答
反對 回復 2023-04-28
  • 1 回答
  • 0 關注
  • 114 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號