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

Dan*_*avo 5 php laravel laravel-5.3

我试图使用laravel ModelFactory创建一个使用一些虚拟数据填充表格的播种表.我一直收到这个错误,而且我没有修复它的想法.

'种族'模式

<?php

namespace App\Game;

use Illuminate\Database\Eloquent\Model;

class Race extends Model
{
//
    public $timestamps = false;
    protected $fillable = ['name','description','icon'];
}
Run Code Online (Sandbox Code Playgroud)

文件2模型工厂文件

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

文件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());
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

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

当我打电话给'php artisan db:seed'时会发生这种情况

Jef*_*ert 8

看起来您直接从文档中复制了播种机.在文档的示例中,有User一个Posts模型通过posts在用户模型中定义的函数与模型相关.有关模型上存在方法的原因的详细信息,请参阅此文档页面.postsUser

您有一个与之无关的Race模型Posts,表示posts您的种族模型中缺少方法.尝试将工厂简化为:

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

这应该为您在数据库中创建10个竞赛条目.each只有当您打算在浏览器中创建与工厂创建的每个实例相关的其他模型时,或者为每个由实例创建的实例(each)执行其他操作时,您才希望提供传递给方法的闭包.Race厂.