【问题标题】:Call to undefined method newCollection when using factories with Laravel-Doctrine使用带有 Laravel-Doctrine 的工厂时调用未定义的方法 newCollection
【发布时间】:2020-05-20 16:07:49
【问题描述】:

我想使用Model factories,但出现此错误:

1) Tests\Factory\UserFactoryTest::testUserCount
Error: Call to undefined method App\Entities\User::newCollection()

C:\Projects\factory_test\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:228
C:\Projects\factory_test\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:178
C:\Projects\factory_test\tests\Factory\UserFactoryTest.php:21

工厂代码复制自Laravel-Doctrine example project

$factory->define(App\Entities\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->title,
    ];
});

我做错了什么?在使用工厂之前,我需要额外的配置吗? Doctrine 效果很好,我只对factory() 有意见

测试类如下所示:

class UserFactoryTest extends TestCase {

    private $users = array();

    protected function setUp(): void
    {
        parent::setUp();

        $this->users = factory(User::class, 3)->create();
    }

    // ...

}

【问题讨论】:

  • 在您的情况下,$factory 似乎仍在使用 Eloquent。阅读this article说明它应该是LaravelDoctrine\ORM\Testing\Factory的实例,只要工厂文件位于database/factories
  • $factoryIlluminate\Database\Eloquent\Factory 的一个实例。但我不明白为什么,因为我的 Facory 类位于database/factories
  • 我会仔细检查您是否已完成位于 here 的所有设置步骤,特别是涉及 ServiceProvider 和配置发布的步骤。
  • @leek 我试过了,但我仍然得到那个错误
  • setUp 函数中尝试$this->users = entity(User::class, 3)->create(); 而不是factory()

标签: php laravel doctrine-orm laravel-factory laravel-doctrine


【解决方案1】:

你的 setUp() 函数使用标准的 Laravel factory() 助手来生成测试数据。

将其更改为:

protected function setUp(): void
{
    parent::setUp();
    $this->users = entity(User::class, 3)->create();
    //             ^^^^^^
}

Laravel Doctrine entity() helper method 在幕后使用与标准 Laravel factory() 辅助方法不同的基类。

// Laravel Doctrine
$factory = app('LaravelDoctrine\ORM\Testing\Factory');

对比 Laravel 框架中的factory() helper method

// Laravel framework
$factory = app(EloquentFactory::class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多