Laravel 9迁移文件类名未从Stub模板正常生成
我运行下面的Laravel命令创建模型和对应的迁移文件:
php artisan make:model Candidate -m
命令输出显示创建成功:
Model created successfully. Created Migration: 2022_08_06_165641_create_candidates_table
但生成的迁移文件里,类名还是{{ class }}占位符,没有替换成正确的类名(比如CreateCandidatesTable)。我已经试过删除vendor目录、重新安装Composer依赖、清除配置缓存,问题依然存在。
检查自定义迁移模板
如果项目根目录下存在resources/stubs文件夹,里面可能有自定义的migration.create.stub迁移模板文件。打开该文件确认类名行是否为class {{ class }} extends Migration——若模板变量被硬编码或写错,会导致替换失败。没有自定义模板的话,去vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs路径检查官方模板是否正常。彻底清除所有缓存
执行以下命令清除Laravel各类缓存:php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan optimize:clear重新生成自动加载文件
运行Composer命令刷新自动加载规则:composer dump-autoload -o发布框架Stub文件
若官方模板文件损坏,发布最新的框架Stub文件到项目中:php artisan stub:publish发布完成后再尝试创建模型,观察占位符是否能正常替换。
临时切换环境到Local
如果.env文件中APP_ENV设置为production,临时改为local后再执行模型创建命令——生产环境的缓存机制可能会干扰模板变量替换。手动修复迁移文件(临时方案)
若上述方法均无效,可先手动将迁移文件里的{{ class }}替换为正确的类名(比如对应文件名的大驼峰格式:2022_08_06_165641_create_candidates_table.php对应的类名是CreateCandidatesTable),再排查是否有自定义Artisan命令或Service Provider干扰了默认生成逻辑。
内容的提问来源于stack exchange,提问作者Prabesh Guragain

