编程

Laravel 12 升级指南

64 2025-02-26 15:30:00

从 11.x 升级到 12.0

预计升级时间:5 分钟

更新依赖

影响可能性:高

在应用的 composer.json 文件中更新如下依赖:

  • laravel/framework 更新到 ^12.0

Carbon 3

影响可能性:低

Carbon 2.x 的支持已经移除。所有 Laravel 12 应用现在要求使用 Carbon 3.x

更新 Laravel Installer

如果你使用 Laravel installer CLI 工具来创建 Laravel 应用,你应该更新 installer 的安装,以兼容 Laravel 12.x 以及新的 Laravel 入门套件。如果你通过 composer global require 安装 Laravel installer,你可以 composer global update 更新 installer:

composer global update laravel/installer

如果原本通过 php.new 安装 PHP 和 Laravel,你可以重新运行你操作系统的 php.new 安装命令,安装最新版的 PHP 和 Laravel installer:

/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"

如果你使用的是Laravel Herd 

捆绑版的 Laravel installer,你应该更新 Herd 安装到最新版本。

Concurrency

Concurrency 结果索引映射

影响可能性:低

当使用关联数组调用 Concurrency::run 方法时,并发操作的结果现在与其关联的键(key)一起返回:

$result = Concurrency::run([
    'task-1' => fn () => 1 + 1,
    'task-2' => fn () => 2 + 2,
]);
 
// ['task-1' => 2, 'task-2' => 4]

数据库

多 Schema 数据库检测

影响可能性:低

Schema::getTables()Schema::getViews()Schema::getTypes() 方法现在默认包含所有 schema 中的结果。你可以传入 schema 参数检索给定的 schema:

// All tables on all schemas...
$tables = Schema::getTables();
 
// All tables on the 'main' schema...
$table = Schema::getTables(schema: 'main');
 
// All tables on the 'main' and 'blog' schemas...
$table = Schema::getTables(schema: ['main', 'blog']);

Schema::getTableListing() 方法现在默认返回 schema 限定的表名。你可以传递 schemaQualified 参数以根据需要更改行为:

$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 中的所有 schema 结果,就如 PostgreSQL 和 SQL Server。

Eloquent

模型及 UUIDv7

影响可能性:中等

HasUuids trait 现在返回与 UUID 规范版本 7 兼容的 UUID(有序 UUID)。如果你想继续使用有序的 UUID v4 字符串作为模型的 ID,现在应该使用 HasVersion4Uuids trait:

use Illuminate\Database\Eloquent\Concerns\HasUuids; 
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids; 

HasVersion7Uuids trait 已被移除。如果你之前使用此 trait, 请使用 HasUuids trait 替换,现在该 trait 提供了同样的功能。

请求

嵌套数值请求合并

影响可能性:低

The $request->mergeIfMissing() 方法现在允许使用“点”符号合并嵌套数组数据。如果你以前依赖此方法创建包含键的“点”符号版本的顶级数组键,则可能需要调整你的应用以考虑此新行为:

$request->mergeIfMissing([
    'user.last_name' => 'Otwell',
]);

验证

图片验证现在排除了 SVG

image 验证规则默认不再允许 SVG 图片。如果使用 image 规则时要运行 SVG,你必须显式声明允许:

use Illuminate\Validation\Rules\File;
 
'photo' => 'required|image:allow_svg'
 
// Or...
'photo' => ['required', File::image(allowSvg: true)],

 

下一篇