* * * * *
[TOC]
## 简介
Eloquent 返回的所有多结果集都是 `Illuminate\Database\Eloquent\Collection` 对象的实例,包括通过 `get` 方法检索或通过访问关联关系获取到的结果。 Eloquent 的集合对象继承了 Laravel 的 [集合基类](https://www.kancloud.cn/tonyyu/laravel_5_6/786241),因此它自然也继承了数十种能优雅地处理 Eloquent 模型底层数组的方法。
当然,所有的集合都可以作为迭代器,你可以像遍历简单的 PHP 数组一样来遍历它们:
~~~
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
~~~
不过,集合比数组更加强大,它通过更直观的接口暴露出可链式调用的 map/reduce 等操作。例如,让我们移除所有未激活的用户并收集剩余用户的名字:
~~~
$users = App\User::all();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
~~~
> {note} 大多数 Eloquent 集合方法会返回新的 Eloquent 集合实例, 但是 `pluck`, `keys`, `zip`, `collapse`, `flatten` 和 `flip` 方法除外,它们会返回一个 [集合基类](https://www.kancloud.cn/tonyyu/laravel_5_6/786241) 实例。同样,如果 `map` 操作返回的集合不包含任何 Eloquent 模型,那么它会被自动转换成集合基类。
## 可用方法
### 集合基类
所有 Eloquent 都继承了基础的 [Laravel 集合](https://www.kancloud.cn/tonyyu/laravel_5_6/786241) 对象。因此,它们也继承了所有集合基类提供的强大的方法:
[all](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#all_155)
[average](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#average_165)
[avg](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#avg_169)
[chunk](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#chunk_183)
[collapse](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#collapse_209)
[combine](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#combine_223)
[concat](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#concat_237)
[contains](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#contains_251)
[containsStrict](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#containsStrict_294)
[count](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#count_298)
[crossJoin](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#crossJoin_310)
[dd](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#dd_350)
[diff](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#diff_371)
[diffAssoc](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#diffAssoc_385)
[diffKeys](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#diffKeys_408)
[dump](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#dump_433)
[each](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#each_454)
[eachSpread](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#eachSpread_474)
[every](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#every_494)
[except](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#except_506)
[filter](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#filter_522)
[first](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#first_550)
[firstWhere](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#firstWhere_570)
[flatMap](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#flatMap_595)
[flatten](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#flatten_615)
[flip](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#flip_655)
[forget](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#forget_669)
[forPage](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#forPage_685)
[get](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#get_699)
[groupBy](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#groupBy_731)
[has](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#has_824)
[implode](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#implode_836)
[intersect](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#intersect_859)
[intersectByKeys](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#intersectByKeys_873)
[isEmpty](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#isEmpty_891)
[isNotEmpty](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#isNotEmpty_901)
[keyBy](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#keyBy_911)
[keys](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#keys_950)
[last](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#last_967)
[macro](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#macro_987)
[make](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#make_991)
[map](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#map_995)
[mapInto](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#mapInto_1013)
[mapSpread](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#mapSpread_1041)
[mapToGroups](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#mapToGroups_1059)
[mapWithKeys](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#mapWithKeys_1097)
[max](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#max_1129)
[median](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#median_1143)
[merge](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#merge_1157)
[min](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#min_1183)
[mode](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#mode_1197)
[nth](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#nth_1211)
[only](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#only_1231)
[pad](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#pad_1247)
[partition](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#partition_1269)
[pipe](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#pipe_1281)
[pluck](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#pluck_1295)
[pop](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#pop_1339)
[prepend](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#prepend_1355)
[pull](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#pull_1381)
[push](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#push_1397)
[put](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#put_1411)
[random](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#random_1425)
[reduce](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#reduce_1447)
[reject](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#reject_1471)
[reverse](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#reverse_1489)
[search](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#search_1511)
[shift](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#shift_1541)
[shuffle](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#shuffle_1557)
[slice](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#slice_1571)
[sort](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sort_1597)
[sortBy](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sortBy_1615)
[sortByDesc](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sortByDesc_1663)
[sortKeys](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sortKeys_1667)
[sortKeysDesc](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sortKeysDesc_1691)
[splice](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#splice_1695)
[split](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#split_1745)
[sum](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#sum_1759)
[take](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#take_1798)
[tap](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#tap_1824)
[times](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#times_1839)
[toArray](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#toArray_1871)
[toJson](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#toJson_1889)
[transform](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#transform_1901)
[union](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#union_1919)
[unique](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#unique_1933)
[uniqueStrict](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#uniqueStrict_1991)
[unless](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#unless_1995)
[unwrap](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#unwrap_2017)
[values](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#values_2035)
[when](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#when_2057)
[where](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#where_2079)
[whereStrict](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#whereStrict_2105)
[whereIn](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#whereIn_2109)
[whereInStrict](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#whereInStrict_2135)
[whereNotIn](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#whereNotIn_2139)
[whereNotInStrict](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#whereNotInStrict_2165)
[wrap](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#wrap_2169)
[zip](https://www.kancloud.cn/tonyyu/laravel_5_6/786241#zip_2193)
## 自定义集合
如果你需要在自己的扩展方法中使用自定义的 `Collection` 对象,可以在你自己的模型中重写 `newCollection` 方法:
~~~
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 创建一个新的 Eloquent 集合实例对象。
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
~~~
一旦你定义了 `newCollection` 方法,任何时候都可以在 Eloquent 返回的模型的 `Collection` 实例中获得你的自定义集合实例。如果你想要在应用程序的每个模型中使用同一个自定义集合,则应该在所有的模型继承的模型基类中重写 `newCollection` 方法。
- 前言
- 翻译说明
- 发行说明
- 升级指南
- 贡献导引
- 入门指南
- 安装
- 配置信息
- 文件夹结构
- Homestead
- Valet
- 部署
- 核心架构
- 请求周期
- 服务容器
- 服务提供者
- Facades
- Contracts
- 基础功能
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- URL
- Session
- 表单验证
- 错误
- 日志
- 前端开发
- Blade 模板
- 本地化
- 前端指南
- 编辑资源 Mix
- 安全相关
- 用户认证
- Passport OAuth 认证
- 用户授权
- 加密解密
- 哈希
- 重置密码
- 综合话题
- Artisan 命令行
- 广播系统
- 缓存系统
- 集合
- 事件系统
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- 数据填充
- Redis
- Eloquent ORM
- 快速入门
- 模型关联
- Eloquent 集合
- 修改器
- API 资源
- 序列化
- 测试相关
- 快速入门
- HTTP 测试
- 浏览器测试 Dusk
- 数据库测试
- 测试模拟器
- 官方扩展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社会化登录