Laravel 5.2: Unable to locate factory with name [default]

我的梦境 提交于 2019-11-30 11:10:41

By default the laravel installation comes with this code in the database/factories/ModelFactory.php File.

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

So you need to define a factory Model before you use it to seed database. This just uses an instance of Faker Library which is used to generate fake Data for seeding the database to perform testing.

Make sure You have added a similar Modal Factory for the Comments Model.

So your Comments Model Factory will be something like this :

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

If nothing helps with PHPUnit.

For those of readers who stuck with the same issue in tests, I found out that I forgot to add parent::setUp() in setUp method.

This can also happen when you are running the command factory()->create() from php artisan tinker. Make sure you save the file database/factories/ModelFactory.php before opening tinker

1º Step -   Make sure CommentFactory is using Comment instead of Model.

use App\Comment
...

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

2º Step - Verify that the names are correct in CommentsTableSeeder.

use App\Comment
...

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

Good luck!

I'm using laravel 5.5 and for that doing this is bit different. You have to create CommentFactory.php inside \database\factories directory and add this inside,

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

And add this,

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

instead of

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

I just wanted to add this since I'm facing the same issue for later version and this thread helped me a lot to fix it.

This could be a cache problem. You can resolve it executing the commands following commands.

php artisan clear-compiled
composer dump-autoload
php artisan optimize

I'm using Laravel Framework 5.7.19. And in my case, my factory file is generated from command line make:factory. The default model in the file is:

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

You should change the name Model to the thing you exactly want to use, in my case it is \App\InterviewQuestion, so it becomes:

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

I was trying to test Model Factory from tinker. I had created model factory as explained in above thread and other Laravel docs. But it would not run and threw an InvalidArgumentException with message

Unable to locate factory with name [default] [/App/Game]

I was running it in Tinker command line as:

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

After some time, I found that problem was the leading backslash \. I ran it like below and it worked fine.:

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

Silly thing, but may help someone.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!