Eloquent ORM ―― 集合
最后更新于:2022-04-01 04:10:43
# 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`方法。