集合

1、简介

Eloquent返回的所有多结果集都是Illuminate\Database\Eloquent\Collection对象的实例,包括通过get方法或者通过访问关联关系获取的结果。Eloquent集合对象继承自Laravel的集合基类,因此很自然的继承了很多处理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集合基类,因此,它们继承所有集合基类提供的强大方法: all chunk collapse contains count diff each filter first flatten flip forget forPage get groupBy has implode intersect isEmpty keyBy keys last map merge pluck pop prepend pull push put random reduce reject reverse search shift shuffle slice sort sortBy sortByDesc splice sum take toArray toJson transform unique values where whereLoose zip

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

上一篇: 关联关系

下一篇: 访问器&修改器