Skip to main content

簡介

當你透過 Eloquent 取得多筆模型時,結果會以 Illuminate\Database\Eloquent\Collection 回傳。 它繼承自 Illuminate\Support\Collection,因此可以直接使用基底集合的方法。
建議先熟悉基底的集合Eloquent 入門,能更容易理解 Eloquent 集合的擴充點。

可用的方法

Eloquent\Collection 繼承了基底集合的所有方法,並額外新增了針對模型的方法。

append / withoutAppends / setAppends

可對整個集合操作序列化時的附加屬性(appends)。

contains / diff / except / intersect / only

以模型實例或主鍵為基準,進行是否包含、差集、交集、排除與擷取的判斷。

find / findOrFail

以主鍵在已取得的集合中尋找模型。

fresh

以資料庫的最新狀態重新取得集合內每一個模型。

load / loadMissing

可對已取得的集合事後 Eager Loading 關聯。

modelKeys

取得集合內模型的主鍵清單。

makeVisible / makeHidden / mergeVisible / mergeHidden / setVisible / setHidden

可以集合為單位調整序列化時的顯示 / 隱藏屬性。

partition

依條件將集合切成 2 個 Eloquent\Collection,外層以 Illuminate\Support\Collection 回傳。

toQuery

依取得的模型群組主鍵建立 whereIn 查詢,方便用來批次更新或刪除。
相較於在迴圈中呼叫 save(),透過 toQuery() 轉為批次查詢,能同時兼顧實務效能與程式可讀性。

unique

移除主鍵相同的重複模型。

從 Eloquent 集合轉換為基底集合

collapseflattenflipkeyspluckzip 會回傳 Illuminate\Support\Collection。 另外,若 map 的結果不含 Eloquent 模型,也會轉換為基底集合。

自訂集合

若想為特定模型使用專屬的集合類別,最直覺的方式是使用 #[CollectedBy] 屬性。

#[CollectedBy] 屬性(推薦)

newCollection() 方法(替代方案)

定義 newCollection()#[CollectedBy] 後,原本會回傳 Eloquent\Collection 的情境將改回傳你的自訂集合。 若想全體模型都套用,可在共通基底模型中定義 newCollection()

相關頁面

集合

先熟悉 Illuminate\\Support\\Collection 的基本操作。

Eloquent 入門

在使用 Eloquent 集合前,先整理模型與查詢的基礎。
最後修改於 2026年8月2日