【问题标题】:Laravel 5.3 ModelFactory Seeder Call to undefined method Illuminate\Database\Query\Builder::posts()Laravel 5.3 ModelFactory Seeder 调用未定义的方法 Illuminate\Database\Query\Builder::posts()
【发布时间】:2017-02-14 04:34:39
【问题描述】:

我正在尝试使用 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”时会发生这种情况

【问题讨论】:

    标签: php laravel laravel-5.3


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,这是我第一次使用 laravel。这非常有效。
    • 不客气,很高兴为您提供帮助。欢迎来到光明。
    • 谢谢你的回答是正确的......在用户模型的情况下是: factory(App\User::class, 10)->create();
    猜你喜欢
    • 2017-11-23
    • 2017-03-31
    • 2018-10-03
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2014-04-23
    • 2014-04-25
    相关资源
    最近更新 更多