Skip to content

Eloquent: 集合

简介

所有返回多个模型结果的 Eloquent 方法都会返回 Illuminate\Database\Eloquent\Collection 类的实例,包括通过 get 方法检索的结果或通过关联关系访问的结果。Eloquent 集合对象继承 Laravel 的基础集合,因此它自然继承了几十个用于流畅地处理底层 Eloquent 模型数组的方法。请务必查看 Laravel 集合文档以了解所有这些有用的方法!

所有集合也充当迭代器,允许你像遍历简单 PHP 数组一样遍历它们:

php
use App\Models\User;

$users = User::where('active', 1)->get();

foreach ($users as $user) {
    echo $user->name;
}

但是,如前所述,集合比数组强大得多,并提供了各种可以使用直观接口链接的映射/归约操作。例如,我们可以删除所有不活跃的模型,然后收集每个剩余用户的名字:

php
$names = User::all()->reject(function (User $user) {
    return $user->active === false;
})->map(function (User $user) {
    return $user->name;
});

Eloquent 集合转换

虽然大多数 Eloquent 集合方法返回新的 Eloquent 集合实例,但 collapseflattenflipkeyspluckzip 方法返回基础集合实例。同样,如果 map 操作返回不包含任何 Eloquent 模型的集合,它将被转换为基础集合实例。

可用方法

所有 Eloquent 集合都继承基础 Laravel 集合对象;因此,它们继承了基础集合类提供的所有强大方法。

此外,Illuminate\Database\Eloquent\Collection 类提供了一组超集方法来帮助管理模型集合。大多数方法返回 Illuminate\Database\Eloquent\Collection 实例;但是,某些方法(如 modelKeys)返回 Illuminate\Support\Collection 实例。

append($attributes)

append 方法可用于指示应该为集合中的每个模型追加某个属性。此方法接受属性数组或单个属性:

php