Laravel 5.2:无法找到名称为[factory]的工厂

问题描述 投票:21回答:7

我想在使用它时播种数据库

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

在数据库中添加三个用户,但是当我使用它时

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

告诉我错误

[InvalidArgumentException] 无法找到名称为[默认] [app \ Comment]的工厂。

php laravel laravel-5 laravel-5.2 laravel-seeding
7个回答
34
投票

默认情况下,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),
    ];
});

因此,在使用工厂模型对种子数据库进行种子设定之前,需要先定义它。这只是使用Faker Library的一个实例,它用于生成假数据,用于播种数据库以执行测试。

确保您为评论模型添加了类似的模态工厂。

所以你的评论模型工厂将是这样的:

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

16
投票

如果PHPUnit没有任何帮助。

对于那些在测试中遇到同样问题的读者,我发现我忘了在parent::setUp()方法中添加setUp


14
投票

当您从factory()->create()运行命令php artisan tinker时,也会发生这种情况。确保在打开修补程序之前保存文件database/factories/ModelFactory.php


7
投票

1º步骤 - 确保CommentFactory使用的是Comment而不是Model。

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而且这样做有点不同。你必须在\ database \ factories目录中创建CommentFactory.php并将其添加到里面,

$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();

我只想添加这个,因为我面临着更高版本的相同问题,这个线程帮助我解决了很多问题。


1
投票

我正在使用Laravel Framework 5.7.19。在我的例子中,我的工厂文件是从命令行make:factory生成的。文件中的默认模型是:

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

您应该将名称Model更改为您确切要使用的内容,在我的情况下,它是\App\InterviewQuestion,因此它变为:

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

1
投票

这可能是缓存问题。您可以解决它按照命令执行命令。

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

0
投票

我试图从修补模型中测试模型工厂。我已经创建了模型工厂,如上面的线程和其他Laravel文档中所述。但它不会运行并向InvalidArgumentException发送消息

无法找到名称[默认] [/ App / Game]的工厂

我在Tinker命令行中运行它:

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

过了一段时间,我发现问题是领先的反斜杠\。我像下面一样运行它并且工作正常:

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

傻事,但可能会帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.