【问题标题】:Laravel 5.8 factory states Unable to locate factory with name [default] [CLASS]Laravel 5.8 工厂状态无法找到名称为 [默认] [CLASS] 的工厂
【发布时间】:2019-10-05 03:45:32
【问题描述】:

我正在尝试创建两组不同的播种机,并尝试使用 Laravel 的工厂状态为每个播种机指定不同的工厂。这是一个 BoopieFactory 的基本示例:

$factory
    ->state(App\Models\Boopie::class, 'one_flavored', function (Faker $faker) {
        return [];
    });

$factory
    ->state(App\Models\Boopie::class, 'two_flavored', function (Faker $faker) {
        return ['something different'];
    });

当时我假设我可以拨打factory(\App\Models\Boopie::class, 25)->states('one_flavored')->create();factory(\App\Models\Boopie::class, 25)->states('two_flavored')->create();。这些导致上述Unable to locate factory with name [default] [App\Models\Boopie]. 错误。我是否在这里遗漏了一些小东西,或者这只是对工厂状态的完全误解?还是我还需要先定义工厂然后再链接状态? Laravel 的文档通常很棒,但在这个部门中缺乏。我还在查看defineAs(未记录,但在雄辩的源代码中)尝试为具有不同返回的同一类创建两个不同的别名。比如:

$factory
    ->defineAs(App\Models\Boopie::class, 'OneFlavor', function (Faker $faker) {
        return [];
    });

$factory
    ->defineAs(App\Models\Boopie::class, 'TwoFlavor', function (Faker $faker) {
        return ['Something different'];
    });

然后我尝试这样调用:factory('OneFlavor', 25)->create(); 并得到异常:Class 'OneFlavor' not found。也许还有另一种方法可以完全解决这个问题,或者我只是错过了一些东西?我也尝试过像这样嵌套它,这似乎更接近但仍然有例外:Unable to locate [oneFlavor] state for [App\Models\Boopie].

$factory->define(App\Models\Boopie::class, function (Faker $faker) use ($factory) {
$factory->state(App\Models\Boopie::class, 'oneFlavor', function ($faker) {
    return [];
});

$factory->state(App\Models\Boopie::class, 'twoFlavor', function ($faker) {
    return ['Someting different'];
});
return [];

});

提前谢谢????!

【问题讨论】:

    标签: laravel laravel-5 factory laravel-5.8 laravel-seeding


    【解决方案1】:

    好的,这样解决了:

    $factory->define(App\Models\Boopie::class, function (Faker $faker) {
        return [
            'thingOne' => 'red shirt',
            'thingTwo' => 'blue shirt'
        ];
    });
    
    $factory->state(App\Models\Boopie::class, 'usiFlavored', function (Faker $faker) {
        return [
            'thingOne' => 'blue shirt',
            'thingTwo' => 'red shirt'
        ];
    });
    

    您需要首先定义一个带有属性的默认工厂,然后您的各种状态可以为这些属性指定不同的值。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 2016-07-25
      • 2019-03-10
      • 1970-01-01
      • 2020-02-26
      • 2019-03-19
      • 2017-03-13
      • 2021-01-29
      相关资源
      最近更新 更多