我想在使用它时播种数据库
public function run()
{
$users = factory(app\User::class, 3)->create();
}
在数据库中添加三个用户,但是当我使用它时
public function run()
{
$Comment= factory(app\Comment::class, 3)->create();
}
告诉我错误
[InvalidArgumentException] 无法找到名称为[默认] [app \ Comment]的工厂。
默认情况下,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
];
});
如果PHPUnit没有任何帮助。
对于那些在测试中遇到同样问题的读者,我发现我忘了在parent::setUp()
方法中添加setUp
。
当您从factory()->create()
运行命令php artisan tinker
时,也会发生这种情况。确保在打开修补程序之前保存文件database/factories/ModelFactory.php
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();
}
祝好运!
我正在使用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();
我只想添加这个,因为我面临着更高版本的相同问题,这个线程帮助我解决了很多问题。
我正在使用Laravel Framework 5.7.19
。在我的例子中,我的工厂文件是从命令行make:factory
生成的。文件中的默认模型是:
$factory->define(Model::class, ...
您应该将名称Model
更改为您确切要使用的内容,在我的情况下,它是\App\InterviewQuestion
,因此它变为:
$factory->define(\App\InterviewQuestion::class, ...
这可能是缓存问题。您可以解决它按照命令执行命令。
php artisan clear-compiled
composer dump-autoload
php artisan optimize
我试图从修补模型中测试模型工厂。我已经创建了模型工厂,如上面的线程和其他Laravel文档中所述。但它不会运行并向InvalidArgumentException
发送消息
无法找到名称[默认] [/ App / Game]的工厂
我在Tinker命令行中运行它:
factory('\App\Game')->create();
过了一段时间,我发现问题是领先的反斜杠\
。我像下面一样运行它并且工作正常:
factory('App\Game')->create();
傻事,但可能会帮助别人。