无法找到名称为[factory] ​​[Modules \ Brokerquotes \ Entities \ Insuree]的工厂

时间:2018-03-07 15:36:46

标签: php laravel-5.3 artisan-migrate

我绝对有工厂

$factory->define(Modules\Brokerquotes\Entities\Insuree::class,....

在DatabaseSeeder中我有

factory("Modules\\Brokerquotes\\Entities\\Insuree", 5)->create()-> ......

但是当我尝试使用php artisan db:seed --class=....直接调用播种器类时,我得到主题错误

  

无法找到名称为[factory] ​​[Modules \ Brokerquotes \ Entities \ Insuree]的工厂。

我尝试composer dumpautoload但仍然无效

我只需要不时运行一些单独的播种机。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

鉴于命名空间,我假设您正在使用Asgard CMS并且您已将Insuree Model Factory放入Module的工厂目录中。这不起作用,因为默认情况下,模型工厂的查找固定为database_path('factories'),请参阅Factory类中的以下内容:

/**
 * Create a new factory container.
 *
 * @param  \Faker\Generator  $faker
 * @param  string|null  $pathToFactories
 * @return static
 */
public static function construct(Faker $faker, $pathToFactories = null)
{
    $pathToFactories = $pathToFactories ?: database_path('factories');

    return (new static($faker))->load($pathToFactories);
}

将Module Factory移动到项目的工厂目录:

<PROJECT>/
├── database/
│   └── factories/
│       └── InsureeFactory.php
└── Modules/

&安培;然后重新运行你的播种机:

namespace Modules\Brokerquotes\Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class BrokerquotesDatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        factory(\Modules\Brokerquotes\Entities\Insuree::class, 5)->create();
    }
}

工匠指挥:

php artisan db:seed --class=Modules\\Brokerquotes\\Database\\Seeders\\BrokerquotesDatabaseSeeder

答案 1 :(得分:1)

我解决了同样的问题,以及更多的标准&#39;解决方案是:

在[ModuleName] ServiceProvider.php中添加registerFactories函数,如下所示:

public function boot()
{
    $this->registerFactories();
    ...
    ...
}

并定义它:

public function registerFactories()
{
    if (! app()->environment('production')) {
        app(\Illuminate\Database\Eloquent\Factory::class)->load(__DIR__ . '/../Database/Factories');
    }
}