簡介
當你透過 Eloquent 取得多筆模型時,結果會以Illuminate\Database\Eloquent\Collection 回傳。
它繼承自 Illuminate\Support\Collection,因此可以直接使用基底集合的方法。
可用的方法
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 查詢,方便用來批次更新或刪除。
unique
移除主鍵相同的重複模型。
從 Eloquent 集合轉換為基底集合
collapse、flatten、flip、keys、pluck、zip 會回傳 Illuminate\Support\Collection。
另外,若 map 的結果不含 Eloquent 模型,也會轉換為基底集合。
自訂集合
若想為特定模型使用專屬的集合類別,最直覺的方式是使用#[CollectedBy] 屬性。
#[CollectedBy] 屬性(推薦)
newCollection() 方法(替代方案)
newCollection() 或 #[CollectedBy] 後,原本會回傳 Eloquent\Collection 的情境將改回傳你的自訂集合。
若想全體模型都套用,可在共通基底模型中定義 newCollection()。
相關頁面
集合
先熟悉
Illuminate\\Support\\Collection 的基本操作。Eloquent 入門
在使用 Eloquent 集合前,先整理模型與查詢的基礎。