Laravel 5.3 ModelFactory Seeder 调用未定义的方法 Illuminate\Database\Query\Builder::posts()

Laravel 5.3 ModelFactory Seeder Call to undefined method Illuminate\Database\Query\Builder::posts()

我正在尝试创建一个播种器 table,它使用 laravel ModelFactory 用一些虚拟数据填充 table。我一直收到这个错误,但我没有办法解决它。

'Race' 模型

<?php

namespace App\Game;

use Illuminate\Database\Eloquent\Model;

class Race extends Model
{
//
    public $timestamps = false;
    protected $fillable = ['name','description','icon'];
}

文件 2 模型工厂文件

$factory->define(App\Game\Race::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'description' => $faker->text,
        'icon' => $faker->url,
    ];
});

文件 3 播种机文件

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class RacesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        factory(App\Game\Race::class, 10)->create()->each(function($u) {
           $u->posts()->save(factory(App\Game\Race::class)->make());
        });
    }
}

我收到以下错误 调用未定义的方法 Illuminate\Database\Query\Builder::posts()

当我调用 'php artisan db:seed'

时会发生这种情况

您似乎是直接从 the documentation. In the documentation's example, there is a User model that is related to a Posts model via a function posts that is defined within the user model. See this documentation page 复制了播种器,以了解有关为什么 User 模型上有 posts 方法的更多信息。

您有一个 Race 模型没有 Posts 与之相关,这表明您的比赛模型中缺少 posts 方法。尝试将工厂简化为:

public function run()
{
    //
    factory(App\Game\Race::class, 10)->create();
}

这应该会在您的数据库中为您创建 10 个比赛条目。仅当您还打算在播种器中创建与工厂创建的每个实例相关的其他模型时,您才希望提供传递给 each 方法的闭包,或者为每个实例执行一些其他操作 由工厂创建的 Race 的实例 (each)。