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

2020/11/30 18:21 · php ·  · 0评论

我想在使用此数据库时为数据库播种

 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 tinkerdatabase/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();

我只想添加此内容,因为我在以后的版本中也遇到了同样的问题,因此该线程对我有很大的帮助。

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

    使用App \ Comment ...

    $factory->define(Comment::class, function (Faker $faker){
    
  2. 步骤-验证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,再次启动它,它开始工作了!

本文地址:http://php.askforanswer.com/laravel-5-2wufazhaodaomingchengweidefaultdegongchang.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!