主题
升级指南
从 11.x 升级至 12.0
高影响变更
低影响变更
从 11.x 升级至 12.0
预计升级时间:5 分钟
NOTE
我们尽力记录每项可能的突破性变更。由于部分变更位于框架的隐秘角落,仅部分变更可能影响您的应用。想节省时间?您可使用 Laravel Shift 自动化应用升级。
更新依赖
影响可能性:高
您应在应用的 composer.json
文件中更新以下依赖:
laravel/framework
至^12.0
Carbon 3
影响可能性:低
已移除对 Carbon 2.x 的支持。所有 Laravel 12 应用现需使用 Carbon 3.x。
更新 Laravel 安装器
若您使用 Laravel 安装器 CLI 工具创建新应用,应更新安装器以兼容 Laravel 12.x 及新 Laravel 入门套件。若通过 composer global require
安装,可使用以下命令更新:
shell
composer global update laravel/installer
若通过 php.new
安装 PHP 和 Laravel,可重新运行适用于您操作系统的 php.new
安装命令,以获取最新 PHP 和 Laravel 安装器版本:
shell
/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
shell
# 以管理员身份运行...
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://php.new/install/windows/8.4'))
shell
/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"
若使用 Laravel Herd 附带的 Laravel 安装器,应将 Herd 更新至最新版本。
并发
并发结果索引映射
影响可能性:低
使用关联数组调用 Concurrency::run
方法时,并发操作的结果现将保留其关联键返回:
php
$result = Concurrency::run([
'task-1' => fn () => 1 + 1,
'task-2' => fn () => 2 + 2,
]);
// ['task-1' => 2, 'task-2' => 4]
数据库
多模式数据库检
影响可能性:低
Schema::getTables()
、Schema::getViews()
和 Schema::getTypes()
方法现默认包含所有模式的结果。可传递 schema
参数以仅获取指定模式的结果:
php
// 所有模式的所有表...
$tables = Schema::getTables();
// 'main' 模式的所有表...
$table = Schema::getTables(schema: 'main');
// 'main' 和 'blog' 模式的所有表...
$table = Schema::getTables(schema: ['main', 'blog']);
Schema::getTableListing()
方法现默认返回模式限定的表名。可传递 schemaQualified
参数调整此行为:
php
$tables = Schema::getTableListing();
// ['main.migrations', 'main.users', 'blog.posts']
$table = Schema::getTableListing(schema: 'main');
// ['main.migrations', 'main.users']
$table = Schema::getTableListing(schema: 'main', schemaQualified: false);
// ['migrations', 'users']
db:table
和 db:show
命令现于 MySQL、MariaDB 和 SQLite 输出所有模式的结果,与 PostgreSQL 和 SQL Server 一致。
模型和 UUIDv7
** 影响可能性:中等**
HasUuids 特性现在返回与 UUID 规范第 7 版兼容的 UUID(有序 UUID)。如果您希望继续为模型 ID 使用有序的 UUIDv4 字符串,您现在应该使用 HasVersion4Uuids 特性:
php
use Illuminate\Database\Eloquent\Concerns\HasUuids; // [!code++]
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids; // [!code--]
HasVersion7Uuids
特性已被移除。如果您之前使用此特性,您应该改用 HasUuids
特性,它现在提供相同的行为。
请求
嵌套数组请求合并
影响可能性:低
$request->mergeIfMissing()
方法现支持使用“点”记法合并嵌套数组数据。若您此前依赖此方法生成包含“点”记法键的顶层数组键,需调整应用以适应新行为:
php
$request->mergeIfMissing([
'user.last_name' => 'Otwell',
]);
验证
图像验证排除 SVG
影响可能性:低
image
验证规则默认不再允许 SVG 图像。若需在 image
规则中允许 SVG,须明确指定:
php
use Illuminate\Validation\Rules\File;
'photo' => 'required|image:allow_svg'
// 或...
'photo' => ['required', File::image(allowSvg: true)],
杂项
我们亦鼓励您查看 laravel/laravel
GitHub 仓库 的变更。虽许多变更非必需,您或希望保持这些文件与应用同步。本指南将涵盖部分变更,但配置文件的更改或注释等则未必包括。您可通过 GitHub 比较工具 轻松查看变更,并选择对您重要的更新。