# 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任務)
- 服務 ―― 任務調度
- 服務 ―― 測試
- 服務 ―― 驗證