Laravel Factory State - Невозможно найти фабрику - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема при выполнении фабрики, я использовал фабричное состояние для фабрик, но он выдаст мне ошибку, когда я выполню фабрику https://laravel.com/docs/5.6/database-testing#factory-states

У меня есть этот UserFactory.php, который содержит код ниже.

<?php

use Faker\Generator as Faker;

$factory->state(App\User::class,'suggestor', function (Faker $faker) {
    return [
        'FirstName'=>$faker->firstName, 
        'LastName'=>$faker->lastName, 
        'Username'=>$faker->userName, 
        'password'=>bcrypt('123asd!@#'),
        'Email'=>$faker->email,
        'AccountType'=>0,
    ];
});

Я использую Тинкер для выполнения заводских команд и пробовал другой синтаксис, но это действительно не решает проблему.

>>> factory(User::class, 1)->states('suggestor')->make();
[!] Aliasing 'User' to 'App\User' for this Tinker session.
InvalidArgumentException with message 'Unable to locate factory with name [default] [User].'
>>> factory(App\User::class, 1)->states('suggestor')->make();
InvalidArgumentException with message 'Unable to locate factory with name [default] [App/User].'
>>> factory(\App\User::class, 1)->states('suggestor')->make();
InvalidArgumentException with message 'Unable to locate factory with name [default] [App/User].'
>>> factory('App\User')->states('suggestor')->make();
InvalidArgumentException with message 'Unable to locate factory with name [default] [App/User].'
>>> factory('App\User',1)->states('suggestor')->make();
InvalidArgumentException with message 'Unable to locate factory with name [default] [App/User].'
>>>

Я надеюсь, что кто-нибудь может мне помочь.

Обновление: Я попытался запустить его на базе данных семян, но я думаю, что это все та же ошибка. но когда я попробовал на другой модели, кажется, хорошо. я думаю, что проблема заключается в модели User, которая выходит из коробки с помощью laravel, и обратите внимание, что я ничего не изменил в модели пользователя, кроме атрибутов модели.

ошибка, производимая сеялкой enter image description here

1 Ответ

0 голосов
/ 30 июня 2018

Как говорится в сообщении об ошибке, вам нужна фабрика по умолчанию. Пожалуйста, сравните следующие два:

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

$factory->state(App\User::class, 'test_state', function (Faker\Generator $faker) {
    return [
        'name' => 'Namoshek',
        'email' => 'namoshek@example.com',
    ];
});

Первое определение - это фабрика по умолчанию для пользователей, когда они не задают состояние. Вы можете вызвать их с помощью factory(App\User::class, 10)->create(), где 10 необязательно, чтобы указать количество создаваемых моделей.

Вы также можете связать ->states('test_state') после звонка на factory(): factory(App\User::class)->states('test_state')->create(), который сначала запустит фабрику по умолчанию, а затем применит изменения, определенные данным состоянием, в модели Но вам всегда нужна фабрика по умолчанию, иначе система не знает, где и к чему применить состояние.

Кстати, между ->create() и ->make() есть разница. Последний только создает модели, не сохраняя их в базе данных, тогда как первый сохраняет их. Так что ->create() эквивалентно ->make()->save().

...