我正在尝试创建两组不同的播种机,并尝试使用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 [];
});
谢谢!
答案 0 :(得分:0)
好,像这样解决:
add_filter('upload_dir', 'multisite_path');
function multisite_path( $param ){
$path = str_replace('sites/2/', '', $param['path']);
$url = str_replace('sites/2/', '', $param['url']);
$param['path'] = $path;
$param['url'] = $url;
return $param;
}
您需要首先定义一个带有属性的默认工厂,然后您的各种状态可以为这些属性指定不同的值。