展開文件目錄

升級指南

高影響變更

中等影響變更

低影響變更

從 11.x 升級到 12.0

預估升級時間:5 分鐘

[!NOTE] 我們試圖記錄每一個可能的破壞性變更。由於一些這些破壞性變更位於框架的晦澀部分,只有部分變更可能會影響您的應用程式。想要節省時間嗎?您可以使用 Laravel Shift 來自動化您的應用程式升級。

更新依賴項目

影響可能性:高

您應該在應用程式的 composer.json 檔案中更新以下依賴項目:

  • laravel/framework^12.0
  • phpunit/phpunit^11.0
  • pestphp/pest^3.0

Carbon 3

影響可能性:低

不再支援 Carbon 2.x。所有 Laravel 12 應用程式現在需要 Carbon 3.x

更新 Laravel 安裝程式

如果您正在使用 Laravel 安裝程式 CLI 工具來建立新的 Laravel 應用程式,您應該更新您的安裝程式以與 Laravel 12.x 和 新的 Laravel 入門套件 兼容。如果您通過 composer global require 安裝了 Laravel 安裝程式,您可以使用 composer global update 來更新安裝程式:

composer global update laravel/installer

如果您最初是通過 php.new 安裝 PHP 和 Laravel,您可以簡單地重新運行您的操作系統的 php.new 安裝命令以安裝最新版本的 PHP 和 Laravel 安裝程式:

```shell tab=macOS /bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"


```shell tab=Windows PowerShell
# 以系統管理員身份運行...
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 tab=Linux /bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"


或者,如果您正在使用 [Laravel Herd's](https://herd.laravel.com) 捆綁的 Laravel 安裝程式副本,您應該將您的 Herd 安裝更新到最新版本。

<a name="concurrency"></a>
### 並發

<a name="concurrency-result-index-mapping"></a>
#### 並發結果索引映射

**影響可能性:低**

當使用關聯數組調用 `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 參數以僅檢索給定模式的結果:

// 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() 方法現在默認返回帶有模式限定名的表名。您可以傳遞 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 上輸出所有模式的結果,就像 PostgreSQL 和 SQL Server 一樣。

Eloquent

模型和 UUIDv7

影響可能性:中

HasUuids 特性現在返回與 UUID 規範第 7 版(有序 UUID)兼容的 UUID。如果您希望繼續使用有序 UUIDv4 字串作為模型 ID,您現在應該使用 HasVersion4Uuids 特性:

use Illuminate\Database\Eloquent\Concerns\HasUuids; // [tl! remove]
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids; // [tl! add]

HasVersion7Uuids 特性已被移除。如果您之前使用此特性,現在應改為使用 HasUuids 特性,它現在提供相同的行為。

請求

嵌套陣列請求合併

影響可能性:低

$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)],

其他

我們也鼓勵您查看 laravel/laravel GitHub 存儲庫 中的更改。雖然這些更改並非必要,但您可能希望將這些文件與您的應用程式保持同步。本次升級指南將涵蓋其中一些更改,但其他更改,如配置文件或註釋的更改,則不會。您可以使用 GitHub 比較工具 輕鬆查看這些更改,並選擇哪些更新對您重要。

I'm ready to translate. Please paste the Markdown content for me to work on.