ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
* * * * * [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` 方法。