直接修改composer.json中"laravel/framework"版本约束(如"^10.0"→"^11.0")是升级主版本的起点,仅运行composer update不会跨主版本升级;必须同步更新php版本、配套包约束,并执行composer update laravel/framework --with-all-dependencies重解依赖树。

直接改 composer.json 里的 "laravel/framework" 才是升级主版本的起点
运行 composer update 永远不会把 "laravel/framework": "^10.0" 升到 "^11.0",它只在当前约束范围内拉补丁或小版本。你看到“没变化”,大概率是因为版本字符串根本没动。
实操建议:
- 先执行
php artisan --version确认当前框架版本 - 打开
composer.json,找到"laravel/framework"这一行,把值改成目标主版本的语义化范围(如升 Laravel 11 就写"^11.0") - 别写死具体小版本(例如
"11.2.0"),否则后续composer update无法自动拉新补丁 - 同时检查
"php"行是否满足要求(Laravel 11 要求"^8.2"),否则 Composer 会静默跳过整个更新流程
composer update laravel/framework --with-all-dependencies 是必须加的参数
只跑 composer update laravel/framework 是危险操作:Laravel 主包升级后,symfony/http-foundation、doctrine/dbal、nesbot/carbon 这些隐式依赖很可能卡在旧版,导致启动时报 Class not found 或方法不存在。
正确做法是强制 Composer 重解整个依赖树:
- 先备份
composer.lock(比如重命名为composer.lock.bak) - 执行
composer update laravel/framework --with-all-dependencies - 如果中途报
doctrine/dbal冲突,先单独执行composer require doctrine/dbal:^4.0,再重试 - 若反复失败,删掉
vendor/和composer.lock,从头来
配套 laravel/* 包必须同步调整版本约束
Laravel 大版本升级不是只改一个包的事。官方文档明确要求所有核心配套包(如 laravel/sail、laravel/pint、laravel/tinker)必须对齐目标版本的兼容范围。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误现象:
-
laravel/sail还是"^1.20",但 Laravel 11 要求"^1.27",导致php artisan sail:install报错 -
phpunit/phpunit仍为"^9.0",而 Laravel 11 已弃用 PHPUnit 9,必须升到"^10.0"或改用 Pest -
spatie/laravel-ignition停在"^1.6",但 Laravel 11 要求"^2.0",结果php artisan serve启动失败
实操建议:
- 打开官方升级指南(如 https://www.php.cn/link/3ab5399acb49634fa9e34acb9c5b4b0f),逐条核对 “Updating Dependencies” 部分列出的包
- 在
composer.json中批量替换所有"laravel/*"的版本约束 - 删掉
"minimum-stability": "dev"—— 它会让 Composer 尝试装 alpha 分支,和稳定版不兼容
升级后不能直接跑 migrate:fresh
截至 2026 年 7 月 1 日,Laravel 官方明确不推荐在主版本升级后立即执行 php artisan migrate:fresh。这不是命令本身的问题,而是新版本的迁移器行为可能已变更(比如 Schema Builder 对 JSON 字段的处理逻辑、默认时间戳精度等),直接清库重迁容易触发不可逆的数据结构丢失或类型误转。
更稳妥的做法是:
- 先运行
php artisan migrate,让新版本迁移文件按顺序执行 - 手动检查
database/migrations下是否有 Laravel 新增的默认迁移(如 Laravel 11 的create_cache_table或create_jobs_table),确认它们未被跳过 - 若需重置测试数据,用
php artisan db:wipe+php artisan migrate+php artisan db:seed分步替代
真正容易被忽略的是:升级后第一次 php artisan config:clear 可能失败——因为新版本的 config/app.php 结构已变,而缓存里还存着旧格式的配置数组。务必先对比官方 laravel/laravel 对应分支的 config/ 目录,合并关键项后再清缓存。










