Laravel Upgrade 是一个面向 Laravel 应用版本升级的技能,核心原则是一次只升级一个主版本,支持 9→10、10→11、11→12 三条升级路径。
用途 当用户希望升级 Laravel 框架版本时使用该技能。它会自动检测当前版本,并按照对应版本的升级指南逐步完成代码与依赖调整。
工作流程
- 检测当前版本:读取 composer.json,查找 laravel/framework 的版本约束。例如 "laravel/framework": "^10.0" 表示 Laravel 10.x。随后确定目标版本(当前版本 + 1)。如果已经是 Laravel 12,则提示用户已处于支持的最新版本。
- 加载升级指南:根据检测到的版本读取对应参考文件:9.x→10.x 读取 references/from-9-to-10.md;10.x→11.x 读取 references/from-10-to-11.md;11.x→12.x 读取 references/from-11-to-12.md。
- 扫描并修复:针对指南中的每一项破坏性变更扫描代码库并应用修复。高影响项(始终检查)包括 composer.json 依赖版本、PHP 版本要求、使用已弃用方法的数据库迁移。中影响项(检查相关文件)包括模型 $dates 属性改为 $casts(9→10)、数据库表达式使用 (string) 转换(9→10)、列修改迁移缺少属性(10→11)、HasUuids trait 行为变更(11→12)。低影响项(发现模式时检查)包括已弃用方法调用(如 Bus::dispatchNow、Redirect::home 等)、契约接口变更、配置文件更新。
- 更新依赖:代码修复完成后更新 composer.json,将 laravel/framework 约束更新到目标版本,并按升级指南更新相关包,然后运行 composer update。
- 升级后验证:运行 php artisan 验证框架能否启动;如存在测试套件则运行测试;检查日志中的弃用警告。
常见模式 依赖更新(所有升级):在 composer.json 中搜索过时的版本约束并按指南更新。 模型 $dates 改为 $casts(9→10):将 protected $dates = ['deployed_at']; 改为 protected $casts = ['deployed_at' => 'datetime'];,搜索模式为 protected $dates\s*=。 数据库表达式转换(9→10):将 $string = (string) DB::raw('select 1'); 改为 $string = DB::raw('select 1')->getValue(DB::connection()->getQueryGrammar());。 列修改(10→11):使用 ->change() 的迁移现在必须包含所有修饰符,例如将 $table->integer('votes')->nullable()->change(); 改为 $table->integer('votes')->unsigned()->default(1)->nullable()->change();。 HasUuids trait(11→12):如需 UUIDv4 行为,将 use Illuminate\Database\Eloquent\Concerns\HasUuids; 改为 use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids;。
适用场景 适用于需要将 Laravel 项目从 9 升级到 10、10 升级到 11、11 升级到 12 的开发者,尤其适合希望按官方升级指南系统化处理破坏性变更、依赖更新与验证流程的场景。
限制 该技能一次只支持升级一个主版本,不提供跨多个主版本的直接升级。资料未提供其支持的运行环境、安装方式、收费模式或价格信息。