You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何在自定义目录生成含关联类的模型?

解决Laravel中make:model --all生成组件到自定义子目录的问题

方案一:手动指定各组件的路径参数

Laravel的make:model命令的--all(或-a)参数默认只会将模型放到指定子目录,其他组件(控制器、迁移、工厂、种子)需要单独通过参数指定目标路径:

执行以下命令可一次性将所有组件生成到对应子目录:

php artisan make:model locations/City --controller=locations/CitiesController --factory=locations/CityFactory --seed=locations/CitySeeder --migration --path=database/migrations/locations

各参数说明:

  • --controller=locations/CitiesController:指定控制器生成在app/Http/Controllers/locations目录下
  • --factory=locations/CityFactory:指定工厂类生成在database/factories/locations目录下
  • --seed=locations/CitySeeder:指定种子类生成在database/seeders/locations目录下
  • --migration --path=database/migrations/locations:指定迁移文件生成在database/migrations/locations子目录

注意:迁移的子目录需要提前手动创建,否则命令会报错;其他组件的子目录会自动创建。

方案二:自定义Artisan生成命令(进阶)

如果需要频繁生成这类子目录下的组件,可以自定义一个Artisan命令,封装上述参数逻辑:

  1. 生成自定义命令:
php artisan make:command MakeModelWithSubdir
  1. 在生成的app/Console/Commands/MakeModelWithSubdir.php文件中,编写逻辑接收模型子路径和名称,自动拼接各组件的路径参数并执行原生命令。示例核心代码:
public function handle()
{
    $modelPath = $this->argument('model-path');
    // 拆分路径和模型名
    [$subdir, $modelName] = explode('/', $modelPath);
    $pluralModelName = Str::plural($modelName);

    // 执行模型生成命令,附带所有组件的路径参数
    $this->call('make:model', [
        'name' => $modelPath,
        '--controller' => "$subdir/{$pluralModelName}Controller",
        '--factory' => "$subdir/{$modelName}Factory",
        '--seed' => "$subdir/{$modelName}Seeder",
        '--migration' => true,
        '--path' => "database/migrations/{$subdir}"
    ]);
}
  1. 在命令类的$signature属性中定义参数:
protected $signature = 'make:model-subdir {model-path : 模型的子目录和名称,如locations/City}';
  1. 之后只需执行自定义命令即可一键生成所有子目录下的组件:
php artisan make:model-subdir locations/City

补充说明

Laravel原生的--all参数设计逻辑是:仅对模型应用指定的子路径,其他组件保持各自默认的根目录结构,因此无法直接通过--all实现所有组件同步到子目录的需求,必须通过上述两种方式处理。

内容的提问来源于stack exchange,提问作者Ahmed El Prince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:10:17