我想在使用此数据库时为数据库播种
public function run()
{
$users = factory(app\User::class, 3)->create();
}
在数据库中添加三个用户,但是当我使用它时
public function run()
{
$Comment= factory(app\Comment::class, 3)->create();
}
告诉我错误
[InvalidArgumentException]
无法找到名称为[default] [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的实例,该实例用于生成伪造的数据,以为数据库播种以执行测试。
确保已为Comment模型添加了类似的Modal Factory。
因此,您的注释模型工厂将如下所示:
$factory->define(App\Comment::class, function (Faker\Generator $faker) {
return [
'comment' => $faker->sentence,
// Any other Fields in your Comments Model
];
});
有时可能是由于导入了错误的TestCase
use PHPUnit\Framework\TestCase;
[错误:并抛出此错误]
use Tests\TestCase;
[正确]
如果没有帮助的PHPUnit。
对于那些谁坚持在测试同一个问题的读者,我发现我忘了补充parent::setUp()
的setUp
方法。
当您factory()->create()
从中运行命令时,也会发生这种情况php artisan tinker
。database/factories/ModelFactory.php
打开修补程序之前,请确保已保存文件
我正在使用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();
我只想添加此内容,因为我在以后的版本中也遇到了同样的问题,因此该线程对我有很大的帮助。
-
步骤-确保CommentFactory使用的是Comment而不是Model。
使用App \ Comment ...
$factory->define(Comment::class, function (Faker $faker){
-
步骤-验证CommentsTableSeeder中的名称正确。
使用App \ Comment ...
公共功能run(){factory(Comment :: class,3)-> create(); }
祝好运!
如果在使用单元测试时遇到此问题,则可以解决您的问题。通过扩展课程
Tests\TestCase
代替
PHPUnit\Framework\TestCase
就我而言,错误是我导入了错误的测试基类。我没有扩展Laravel的Tests \ TestCase,而是从PHPUnit导入了TestCase类。傻了,但是花了我很多时间才解决。
我正在使用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
上面的答案对我来说都没有用。完全解决此错误的最佳方法是通过在TestCase类中注册工厂,如下所示:
<?php
namespace Vendo\Package\Tests;
use Vendor\Package\InboxServiceProvider;
use Illuminate\Database\Eloquent\Factory as EloquentFactory;
class TestCase extends \Orchestra\Testbench\TestCase
{
public function setUp(): void
{
parent::setUp();
// additional setup
$this->app->make(EloquentFactory::class)->load(__DIR__ . '/../database/factories');
}
我试图从修补匠那里测试模型工厂。我已经按照上述线程和其他Laravel文档中的说明创建了模型工厂。但是它不会运行并抛出一条InvalidArgumentException
消息
无法找到名称为[默认] [/ App / Game]的工厂
我在Tinker命令行中将其运行为:
factory('\App\Game')->create();
一段时间后,我发现问题出在反斜杠上 \
。我像下面一样运行它,并且运行良好。
factory('App\Game')->create();
愚蠢的事情,但可能会帮助某人。
没有答案对我有用,因此我删除了我的工厂并重新创建了(每一个都与以前的工厂相同),这个问题为我解决了
我有同样的问题。尝试了一切。没事。然后我退出了Tinker,再次启动它,它开始工作了!
文章标签:laravel , laravel-5 , laravel-5.2 , laravel-seeding , php
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!