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/ModelName
或App/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();
}