# Eloquent ORM —— 集合
## 1、简介
Eloquent的方法。
当然,所有集合也是迭代器,允许你像数组一样对其进行循环:
~~~
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
~~~
然而,集合比数组更加强大,使用直观的接口提供了各种映射/简化操作。例如,让我们移除所有无效的模型并聚合还存在的用户的名字:
~~~
$users = App\User::where('active', 1)->get();
$names = $users->reject(function ($user) {
return $user->active === false;})->map(function ($user) {
return $user->name;
});
~~~
### 2、可用方法
所有的Eloquent集合继承自[Laravel集合](http://laravelacademy.org/post/178.html)基类,因此,它们继承所有集合基类提供的强大方法:
[all](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_3)
[chunk](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_4)
[collapse](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_5)
[contains](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_6)
[count](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_7)
[diff](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_8)
[each](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_9)
[filter](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_10)
[first](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_11)
[flatten](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_12)
[flip](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_13)
[forget](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_14)
[forPage](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_15)
[get](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_16)
[groupBy](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_17)
[has](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_18)
[implode](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_19)
[intersect](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_20)
[isEmpty](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_21)
[keyBy](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_22)
[keys](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_23)
[last](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_24)
[map](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_25)
[merge](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_26)
[pluck](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_27)
[pop](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_28)
[prepend](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_29)
[pull](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_30)
[push](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_31)
[put](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_32)
[random](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_33)
[reduce](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_34)
[reject](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_35)
[reverse](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_36)
[search](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_37)
[shift](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_38)
[shuffle](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_39)
[slice](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_40)
[sort](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_41)
[sortBy](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_42)
[sortByDesc](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_43)
[splice](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_44)
[sum](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_45)
[take](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_46)
[toArray](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_47)
[toJson](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_48)
[transform](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_49)
[unique](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_50)
[values](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_51)
[where](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_52)
[whereLoose](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_53)
[zip](http://laravelacademy.org/post/178.html#ipt_kb_toc_178_54)
### 3、自定义集合
如果你需要在自己扩展的方法中使用自定义的集合对象,可以重写模型上的`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`方法。
- 前言
- 序言
- 序言 ―― 发行版本说明
- 序言 ―― 升级指南
- 序言 ―― 贡献代码
- 开始
- 开始 ―― 安装及配置
- 开始 ―― Laravel Homestead
- 基础
- 基础 ―― HTTP路由
- 基础 ―― HTTP 中间件
- 基础 ―― HTTP 控制器
- 基础 ―― HTTP 请求
- 基础 ―― HTTP 响应
- 基础 ―― 视图
- 基础 ―― Blade模板
- 架构
- 架构 ―― 一次请求的生命周期
- 架构 ―― 应用目录结构
- 架构 ―― 服务提供者
- 架构 ―― 服务容器
- 架构 ―― 契约
- 架构 ―― 门面
- 数据库
- 数据库 ―― 起步
- 数据库 ―― 查询构建器
- 数据库 ―― 迁移
- 数据库 ―― 填充数据
- Eloquent ORM
- Eloquent ORM ―― 起步
- Eloquent ORM ―― 关联关系
- Eloquent ORM ―― 集合
- Eloquent ORM ―― 调整器
- Eloquent ORM ―― 序列化
- 服务
- 服务 ―― 用户认证
- 服务 ―― Artisan 控制台
- 服务 ―― Laravel Cashier(交易)
- 服务 ―― 缓存
- 服务 ―― 集合
- 服务 ―― Laravel Elixir
- 服务 ―― 加密
- 服务 ―― 错误&日志
- 服务 ―― 事件
- 服务 ―― 文件系统/云存储
- 服务 ―― 哈希
- 服务 ―― 帮助函数
- 服务 ―― 本地化
- 服务 ―― 邮件
- 服务 ―― 包开发
- 服务 ―― 分页
- 服务 ―― 队列
- 服务 ―― Redis
- 服务 ―― Session
- 服务 ―― Envoy 任务运行器(SSH任务)
- 服务 ―― 任务调度
- 服务 ―― 测试
- 服务 ―― 验证