Заводские состояния Laravel 5.8 Не удается найти фабрику с именем [по умолчанию] [КЛАСС] - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать два разных набора сеялок и пытаюсь использовать заводские состояния 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]. ошибке.Я что-то здесь упускаю, или это просто полное неправильное понимание заводских состояний?Или мне еще нужно сначала определить фабрику, а затем состояние цепочки?Документы Ларавела, как правило, отличные, но в этом отделе не хватает.Я также смотрел на 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 [];

});

Заранее спасибо ?!

1 Ответ

0 голосов
/ 17 мая 2019

Хорошо, решено так:

$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'
    ];
});

Сначала необходимо определить фабрику по умолчанию с атрибутами, а затем в различных состояниях можно указать разные значения для этих атрибутов.

...