跳到內容

升級指南

高影響變更

低影響變更

從 11.x 升級到 12.0

預估升級時間:5 分鐘

我們嘗試記錄每一個可能發生的重大變更。由於某些重大變更位於框架中較不明顯的部分,因此這些變更中只有一部分實際上可能會影響您的應用程式。想要節省時間嗎?您可以使用 Laravel Shift 來協助自動化您的應用程式升級。

更新依賴套件

影響的可能性:高

您應該在應用程式的 composer.json 檔案中更新下列依賴套件

  • laravel/framework^12.0

Carbon 3

影響的可能性:低

已移除對 Carbon 2.x 的支援。所有 Laravel 12 應用程式現在都需要 Carbon 3.x

更新 Laravel 安裝器

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

1composer global update laravel/installer

如果您最初是透過 php.new 安裝 PHP 和 Laravel,您可以簡單地重新執行適用於您作業系統的 php.new 安裝命令,以安裝最新版本的 PHP 和 Laravel installer

1/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
1# Run as administrator...
2Set-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'))
1/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"

或者,如果您使用 Laravel Herd 捆綁的 Laravel installer 副本,您應該將 Herd 安裝更新到最新版本。

並行

並行結果索引映射

影響的可能性:低

當使用關聯陣列調用 Concurrency::run 方法時,並行操作的結果現在會與其關聯的鍵一起返回

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

資料庫

多 Schema 資料庫檢查

影響的可能性:低

Schema::getTables()Schema::getViews()Schema::getTypes() 方法現在預設包含來自所有 schema 的結果。您可以傳遞 schema 參數以僅檢索給定 schema 的結果

1// All tables on all schemas...
2$tables = Schema::getTables();
3 
4// All tables on the 'main' schema...
5$table = Schema::getTables(schema: 'main');
6 
7// All tables on the 'main' and 'blog' schemas...
8$table = Schema::getTables(schema: ['main', 'blog']);

Schema::getTableListing() 方法現在預設返回 schema 限定的表名稱。您可以傳遞 schemaQualified 參數來根據需要更改行為

1$tables = Schema::getTableListing();
2// ['main.migrations', 'main.users', 'blog.posts']
3 
4$table = Schema::getTableListing(schema: 'main');
5// ['main.migrations', 'main.users']
6 
7$table = Schema::getTableListing(schema: 'main', schemaQualified: false);
8// ['migrations', 'users']

db:tabledb:show 命令現在在 MySQL、MariaDB 和 SQLite 上輸出所有 schema 的結果,就像 PostgreSQL 和 SQL Server 一樣。

請求

巢狀陣列請求合併

影響的可能性:低

$request->mergeIfMissing() 方法現在允許使用「點」表示法合併巢狀陣列資料。如果您先前依賴此方法來建立包含金鑰「點」表示法版本的頂層陣列金鑰,您可能需要調整您的應用程式以適應此新行為

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

驗證

圖片驗證現在排除 SVG

image 驗證規則預設不再允許 SVG 圖片。如果您想在使用 image 規則時允許 SVG,您必須明確允許它們

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

雜項

我們也鼓勵您查看 laravel/laravel GitHub 儲存庫中的變更。雖然許多這些變更並非必要,但您可能希望使這些檔案與您的應用程式保持同步。其中一些變更將在本升級指南中涵蓋,但其他變更(例如組態檔案或註解的變更)則不會涵蓋。您可以使用 GitHub 比較工具輕鬆查看變更,並選擇哪些更新對您來說是重要的。

Laravel 是建構最有效率的方式,
建構、部署和監控軟體。