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

时间:2016-10-05 16:07:23

标签: 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'];
}

文件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&#39;

时会发生这种情况

2 个答案:

答案 0 :(得分:8)

您似乎直接从the documentation复制了播种机。在文档的示例中,有一个User模型通过在用户模型中定义的函数Postsposts模型相关。有关posts模型上User方法的原因的详细信息,请参阅this documentation page

您的Race模型没有Posts与之相关的模型,表示您的种族模型中缺少posts方法。尝试简化工厂:

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

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

答案 1 :(得分:0)

我也有类似的经历。在执行任何种子操作之前,请确保已安装并启用了Php Curl。

sudo apt install php-curl