【发布时间】: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