# 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`方法。