• Eloquent:集合
    • 简介
    • 可用的方法
      • 集合基类
    • 自定义集合
    • 译者署名

    Eloquent:集合

    简介

    Eloquent 返回的所有多结果集都是 Illuminate\Database\Eloquent\Collection 对象的实例,

    默认情况下 Eloquent 返回的都是一个 Illuminate\Database\Eloquent\Collection 对象的实例,包括通过 get 方法检索或通过访问关联关系获取到的结果。Eloquent 的集合对象继承了 Laravel 的 集合基类,因此它自然也继承了数十种能优雅地处理 Eloquent 模型底层数组的方法。

    当然,所有的集合都可以作为迭代器,可以就像简单的 PHP 数组一样来遍历它们:

    1. $users = App\User::where('active', 1)->get();
    2. foreach ($users as $user) {
    3. echo $user->name;
    4. }

    然而,集合比数组更加强大,它通过更直观的接口暴露出可链式调用的 map/reduce 等操作。举个例子,我们要删除模型中所有未激活的并收集剩余用户的名字:

    1. $users = App\User::where('active', 1)->get();
    2. $names = $users->reject(function ($user) {
    3. return $user->active === false;
    4. })
    5. ->map(function ($user) {
    6. return $user->name;
    7. });

    {note} 大多数 Eloquent 集合方法会返回新的 Eloquent 集合实例,但是 pluck, keys, zip, collapse, flattenflip 方法除外,它们会返回 集合基类 实例。同样,如果 map 操作返回的集合不包含任何 Eloquent 模型,那么它会被自动转换成集合基类。

    可用的方法

    集合基类

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



    all
    average
    avg
    chunk
    collapse
    combine
    contains
    containsStrict
    count
    diff
    diffKeys
    each
    every
    except
    filter
    first
    flatMap
    flatten
    flip
    forget
    forPage
    get
    groupBy
    has
    implode
    intersect
    isEmpty
    isNotEmpty
    keyBy
    keys
    last
    map
    mapWithKeys
    max
    median
    merge
    min
    mode
    nth
    only
    partition
    pipe
    pluck
    pop
    prepend
    pull
    push
    put
    random
    reduce
    reject
    reverse
    search
    shift
    shuffle
    slice
    sort
    sortBy
    sortByDesc
    splice
    split
    sum
    take
    tap
    toArray
    toJson
    transform
    union
    unique
    uniqueStrict
    values
    when
    where
    whereStrict
    whereIn
    whereInStrict
    whereNotIn
    whereNotInStrict
    zip

    自定义集合

    如果你需要在自己的扩展方法中使用自定义的 Collection 对象,可以在你自己的模型中重写 newCollection 方法:

    1. <?php
    2. namespace App;
    3. use App\CustomCollection;
    4. use Illuminate\Database\Eloquent\Model;
    5. class User extends Model
    6. {
    7. /**
    8. * 创建一个新的 Eloquent 集合实例对象。
    9. *
    10. * @param array $models
    11. * @return \Illuminate\Database\Eloquent\Collection
    12. */
    13. public function newCollection(array $models = [])
    14. {
    15. return new CustomCollection($models);
    16. }
    17. }

    一旦你定义了 newCollection 方法,任何时候都可以在 Eloquent 返回的模型的 Collection 实例中获取你的自定义集合实例。如果你想要在应用程序的每个模型中使用自定义集合,则应该在所有的模型继承的模型基类中重写 newCollection 方法。

    译者署名

    用户名 头像 职能 签名
    @springjk Eloquent:集合 - 图1 翻译 再怎么说我也是我西北一匹狼

    {note} 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。

    转载请注明:本文档由 Laravel China 社区 laravel-china.org 组织翻译,详见 翻译召集帖。

    文档永久地址: https://d.laravel-china.org