找不到名称为 [默认] [模块代理报价实体被保险人] 的工厂



我肯定有工厂

$factory->define(ModulesBrokerquotesEntitiesInsuree::class,....

在数据库播种器中,我有

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

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

找不到名称为 [默认] [模块\代理报价\实体\被保险人] 的工厂。

我试图composer dumpautoload但仍然不起作用

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

我在这里做错了什么??

我解决了同样的问题,更"标准"的解决方案是:

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

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

并定义它:

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

给定命名空间,我假设您使用的是Asgard CMS,并且您已将Insuree模型工厂放在模块的工厂目录中。这是行不通的,因为默认情况下,模型工厂的查找固定为 database_path('factories') ,请参阅工厂类中的以下内容:

/**
 * Create a new factory container.
 *
 * @param  FakerGenerator  $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);
}

将模块工厂移动到项目的工厂目录:

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

然后重新运行播种机:

namespace ModulesBrokerquotesDatabaseSeeders;
use IlluminateDatabaseSeeder;
use IlluminateDatabaseEloquentModel;
class BrokerquotesDatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();
        factory(ModulesBrokerquotesEntitiesInsuree::class, 5)->create();
    }
}

工匠指挥:

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

最新更新