У меня есть проблема при выполнении фабрики, я использовал фабричное состояние для фабрик, но это даст мне ошибку, когда я выполню фабрику
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, и обратите внимание, что я ничего не изменил в модели пользователя, кроме атрибутов модели.
Как говорится в сообщении об ошибке, вам нужна фабрика по умолчанию. Пожалуйста, сравните следующие два:
$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' => '[email protected]',
];
});
Первое определение — это фабрика по умолчанию для пользователей, когда они не задают состояние. Вы можете позвонить им с factory(App\User::class, 10)->create()
где 10
необязательно указывать количество создаваемых моделей.
Вы также можете цепи ->states('test_state')
после звонка factory()
:
factory(App\User::class)->states('test_state')->create()
, который сначала запустит фабрику по умолчанию, а затем применяет изменения, определенные данным состоянием, к модели. Но вам всегда нужна фабрика по умолчанию, иначе система не знает, где и к чему применять состояние.
Кстати, есть разница между ->create()
а также ->make()
, Последний только создает модели, не сохраняя их в базе данных, тогда как первый сохраняет их. Так ->create()
эквивалентно ->make()->save()
,
Других решений пока нет …