Laravel 5.2: Не удалось найти factory с именем [по умолчанию]

Я хочу создать базу данных когда я использую этот

 public function run()
{
    $users = factory(app\User::class, 3)->create();
}

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

 public function run()
{
    $Comment= factory(app\Comment::class, 3)->create();
}

Покажите мне ошибку

[InvalidArgumentException]
Не удалось найти factory с именем [по умолчанию] [приложение\Комментарий].

Ответ 1

По умолчанию установка laravel поставляется с этим кодом в файле database/factories/ModelFactory.php.

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

Поэтому вам нужно определить модель factory, прежде чем использовать ее для семенной базы данных. Это просто использует экземпляр Faker Library, который используется для генерации поддельных данных для посева базы данных для тестирования.

Убедитесь, что для модели комментариев вы добавили аналогичный Modal factory.

Итак, ваша модель комментариев factory будет примерно такой:

$factory->define(App\Comment::class, function (Faker\Generator $faker) {
    return [
        'comment' => $faker->sentence,
         // Any other Fields in your Comments Model 
    ];
});

Ответ 2

Это также может произойти, если вы выполняете команду factory()->create() из php artisan tinker. Убедитесь, что вы сохранили файл database/factories/ModelFactory.php, прежде чем открывать инструмент

Ответ 3

Если ничего не помогает с PHPUnit.

Для тех читателей, которые столкнулись с той же проблемой в тестах, я обнаружил, что забыл добавить parent::setUp() в метод setUp.

Ответ 4

1º Шаг - Убедитесь, что CommentFactory использует комментарий вместо модели.

use App\Comment
...

    $factory->define(Comment::class, function (Faker $faker){

2º Шаг - Убедитесь, что имена верны в CommentsTableSeeder.

use App\Comment
...

public function run()
{
  factory(Comment::class, 3)->create();
}

Удачи!

Ответ 5

Я использую laravel 5.5 и для этого это немного отличается. Вы должны создать CommentFactory.php в каталоге \ database \ factories и добавить его внутрь,

$factory->define(App\Comment::class, function (Faker\Generator $faker) {
    return [
        'comment' => $faker->sentence,
         // Any other Fields in your Comments Model 
    ];
});

И добавь это,

$Comment= factory(\App\Comment::class, 3)->create();

вместо

$Comment= factory(app\Comment::class, 3)->create();

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

Ответ 6

Я использую Laravel Framework 5.7.19. И в моем случае мой фабричный файл генерируется из командной строки make:factory. Модель по умолчанию в файле:

$factory->define(Model::class, ...

Вы должны изменить имя Model на то, что вы точно хотите использовать, в моем случае это \App\InterviewQuestion, поэтому оно становится:

$factory->define(\App\InterviewQuestion::class, ...

Ответ 7

Я пытался протестировать Model Factory от повозки. Я создал модель фабрики, как объяснено в вышеупомянутой теме и других документах Laravel. Но он не запустится и InvalidArgumentException с сообщением

Невозможно найти фабрику с именем [по умолчанию] [/App/Game]

Я запускал его в командной строке Tinker как:

factory('\App\Game')->create();

Через некоторое время я обнаружил, что эта проблема была главной обратной косой чертой \. Я запустил его, как показано ниже, и он работал нормально

factory('App\Game')->create();

Глупая вещь, но может кому-то помочь.