Skip to content

升级指南

从 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:tabledb: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 比较工具 轻松查看变更,并选择对您重要的更新。