Laravel 8 供应商类"Illuminate\Database\Eloquent\Factory\Factory" 无法解析模型名称工厂类的名称



Laravel 8具有Model类的默认App/Models目录。IlluminateDatabaseEloquentFactoriesFactory具有静态函数resolveFactoryName(),用于解析ModelNameFactory类的名称

public static function resolveFactoryName(string $modelName)
{
$resolver = static::$factoryNameResolver ?: function (string $modelName) {
$modelName = Str::startsWith($modelName, 'App\Models\')
? Str::after($modelName, 'App\Models\')
: Str::after($modelName, 'App\');
return static::$namespace.$modelName.'Factory';
};
return $resolver($modelName);
}

该功能仅适用于App/ModelNameApp/Models/ModelName例如,若Model类的名称是Domain/Customers/Models/ModelName,那个么该函数就不能正常工作。修复它的最佳方法是什么?

正如您在这里看到的,有一个名为guessFactoryNamesUsing的方法可以告诉Laravel它应该如何猜测工厂的名称。

将以下内容添加到您的AppServiceProvider:

use IlluminateDatabaseEloquentFactoriesFactory;
public function register()
{
Factory::guessFactoryNamesUsing(function ($class) {
return 'Database\Factories\' . class_basename($class) . 'Factory';
});
}

来源:

/**
* Specify the callback that should be invoked 
* to guess factory names based on dynamic relationship names.
*
* @param  callable  $callback
* @return void
*/
public static function guessFactoryNamesUsing(callable $callback)
{
static::$factoryNameResolver = $callback;
}

请将其放在AppModelsModelName中的模型类中。确保ModelFactory是工厂名称。

protected static function newFactory()
{
return ModulesModuleDatabaseFactoriesModelFactory::new();
}

最新更新