mcpField
L
laravel-upgrade

laravel-upgrade

github.com/1weiho开发695 次安装41 周前更新
代码仓库

关于 laravel-upgrade

为 Laravel 应用逐个主版本升级提供操作指导,覆盖 9→10、10→11 和 11→12。它从检查版本、对照升级指南到扫描修复和升级后验证,逐步处理兼容性变化。

主要功能

  1. 01检测当前 Laravel 版本
  2. 02按版本读取升级指南
  3. 03扫描并修复破坏性变更
  4. 04更新依赖版本约束
  5. 05验证启动状态并运行测试

适用场景

  1. 01将 Laravel 9 应用升级到 10
  2. 02检查迁移中的数据库列修改
  3. 03处理 Laravel 11 的 UUID 行为变化
  4. 04升级后验证应用和测试套件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/1weiho/laravel-upgrade-skill --skill laravel-upgrade

安装后在 Claude Code 中输入/laravel-upgrade确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
from-10-to-11.md
from-11-to-12.md
from-9-to-10.md

详细介绍

Laravel 升级

每次将 Laravel 应用升级一个主版本。支持:9→10、10→11、11→12。

工作流

1. 检测当前版本

读取 composer.json,查找 laravel/framework 版本约束:

// Example: "laravel/framework": "^10.0" means Laravel 10.x

确定目标版本(当前版本 + 1)。如果已经使用 Laravel 12,请告知用户当前使用的是受支持的最新版本。

2. 加载升级指南

根据检测到的版本,读取相应的参考文件:

当前版本目标版本参考文件
9.x10.xreferences/from-9-to-10.md
10.x11.xreferences/from-10-to-11.md
11.x12.xreferences/from-11-to-12.md
3. 扫描并修复

针对指南中的每项破坏性变更,扫描代码库并应用修复:

高影响(始终检查):

  • composer.json 依赖版本
  • PHP 版本要求
  • 使用已弃用方法的数据库迁移

中等影响(检查相关文件):

  • 模型 $dates 属性 → $casts(9→10)
  • 使用 (string) 强制转换的数据库表达式(9→10)
  • 缺少属性的列修改迁移(10→11)
  • HasUuids trait 行为变更(11→12)

低影响(发现相关模式时检查):

  • 已弃用的方法调用(Bus::dispatchNow、Redirect::home 等)
  • 契约接口变更
  • 配置文件更新
4. 更新依赖项

修复代码后,更新 composer.json:

# Update laravel/framework constraint to target version
# Update related packages per upgrade guide
composer update
5. 升级后验证
  • 运行 php artisan,确认框架正常启动
  • 如果有测试套件,则运行测试
  • 检查日志中的弃用警告

常见模式

依赖项更新(所有升级)

搜索 composer.json 中过时的约束,并根据指南更新。

将模型 $dates 改为 $casts(9→10)
// Before
protected $dates = ['deployed_at'];

// After
protected $casts = ['deployed_at' => 'datetime'];

搜索模式:protected \$dates\s*=

数据库表达式强制转换(9→10)
// Before
$string = (string) DB::raw('select 1');

// After
$string = DB::raw('select 1')->getValue(DB::connection()->getQueryGrammar());
列修改(10→11)

现在,使用 ->change() 的迁移必须包含所有修饰符:

// Before (implicit retention)
$table->integer('votes')->nullable()->change();

// After (explicit)
$table->integer('votes')->unsigned()->default(1)->nullable()->change();
HasUuids Trait(11→12)
// Before (ordered UUIDv4)
use Illuminate\Database\Eloquent\Concerns\HasUuids;

// After (if you need UUIDv4 behavior)
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids;

评论

支持 Markdown