简介
在 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
按条件把集合拆分成两个 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 集合。