Laravel 5.3中出现了“调用未定义的方法Illuminate\Database\Eloquent\Factory :: state()”错误。

5

我想定义几个不同的用户模型变体进行测试,使用Laravel的ModelFactory,文档在这里

$factory->define(App\User::class, function(\Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'remember_token' => str_random(10),
        'phone' => $faker->phoneNumber,
    ];
});

$factory->state(App\User::class, 'admin', function (Faker\Generator $faker) {
    return [
        'groups' => function(App\User $u) {
            return App\Models\Group::where('level', '<=', 5)->get()->toArray();
        }
    ];
});

然后我创建了一个用户模型(User model):

$user = factory(User::class)->states('admin')->make();

但是PHPUnit似乎会在测试结束后退出而不发出任何抱怨。在PHP日志中,我看到:

Call to undefined method Illuminate\Database\Eloquent\Factory::state()

在Laravel文档中,关于state()方法的说明很少,我已经搜索和试验了几个小时,但仍未取得进展。另外,groups属性指的是多对多(Many)关系。不过,即便是创建简单模型,也会抛出该异常。

4
在研究Illuminate\Database\Eloquent\Factory和FactoryBuilder类后,我发现与github上最新的Laravel分支相比,state()和states()方法都缺失了。运行composer update之后,我升级到了Laravel Framework v5.3.18,现在ModelFactory的状态正常工作。 - Aaron Dressler
1
谢谢您的帮助。我建议您回答自己的问题。 - whoan
1个回答

2

在查阅 Illuminate\Database\Eloquent\Factory 和 FactoryBuilder 类的过程中,我发现与最新的 Laravel 分支相比,state() 和 states() 方法都已丢失。运行 composer update 后,将我更新到 Laravel Framework v5.3.18 版本,现在 ModelFactory states 正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接