laravel 10 升级到 11 的核心步骤是:确认 php ≥ 8.2,修改 composer.json 中 laravel/framework 为 "^11.0" 并更新配套包,运行 composer update;处理隐式模型绑定严格模式、api 中间件移除限流、response::json() 废弃等关键变更,并验证迁移与测试。

目前 Laravel 最新稳定版是 11.x(截至 2026 年 10 月),Laravel 12 尚未发布。官方未公布 Laravel 12 的发布时间表,也无正式文档、升级指南或兼容性说明。因此,“Laravel 10 迁移到 Laravel 12”的教程并不存在,强行操作会导致依赖解析失败、命令报错或运行时异常。
先确认你真正要升到哪个版本
建议按官方支持路径行动:
- 当前是 Laravel 10?→ 应先升级到 Laravel 11.x(LTS 版本,长期支持至 2027 年 2 月)
- 不要跳过 11.x 直接“预演”12 → 没有兼容层、没有废弃提示、没有迁移工具,所有假设都不可靠
- 可关注 Laravel 官网的 Upgrade Guide: 11.x 和 GitHub 上的
laravel/frameworkv11 发布标签
从 Laravel 10 升级到 11 的核心步骤
这是当前唯一可行、被完整验证的升级路径:
-
检查 PHP 环境:Laravel 11 要求 PHP ≥ 8.2,运行
php -v确认;不满足需先升级 PHP -
更新 composer.json:将
"laravel/framework": "^10.0"改为"^11.0",同时更新"php": "^8.2";同步调整配套包如laravel/sanctum(≥ v4.0)、laravel/fortify(≥ v1.20)等 -
执行依赖更新:运行
composer update --with-all-dependencies;若失败,先用composer why-not laravel/framework:^11.0查冲突源 -
处理关键变更:
- 隐式模型绑定默认开启 strict 模式 → 字符串 ID 路由(如
/api/posts/abc)会 404,需在模型加$keyType = 'string'或改用显式查询 -
api中间件组已移除throttle:api→ 若需限流,须手动加回或在路由中单独指定 -
Response::json()已废弃 → 全部替换为response()->json() -
app/Http/Kernel.php中的中间件注册方式微调,部分中间件类路径变更(参考升级指南逐条核对)
- 隐式模型绑定默认开启 strict 模式 → 字符串 ID 路由(如
数据库迁移相关适配要点
升级框架本身不影响已有迁移文件执行逻辑,但要注意:
- 修改字段(如
change())仍需doctrine/dbal,且该包需与 Laravel 11 兼容(v3.7+ 推荐) - 外键定义语法不变,但 MySQL 8.0.31+ 对约束名长度更敏感,避免自定义过长的约束别名
- 执行前务必在测试库运行
php artisan migrate:fresh --seed验证全量结构是否正常 - 生产环境迁移必须加
--force,并安排在低峰期,配合数据库备份
升级后必做验证项
不能只看 artisan --version 显示 11.x 就算成功:
- 运行
php artisan test(确保 PHPUnit ≥ v11) - 访问几个关键 API 和页面,检查 JSON 响应、表单提交、认证流程是否断裂
- 清缓存:
php artisan config:clear && php artisan cache:clear && php artisan view:clear && composer dump-autoload - 检查日志是否有
Deprecated:或Class not found报错











