雄弁なコレクション


  • #はじめに
  • Eloquent によって返されるすべての複数の結果セットは、get# によって取得されたものを含む、Illuminate\Database\Eloquent\Collection
  • オブジェクトのインスタンスです。 ## メソッドまたはアソシエーション関係によって取得された結果を通じてアクセスされます。 Eloquent のコレクション オブジェクトは Laravel のコレクション基本クラスを継承するため、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 メソッド。コレクションの Base クラス インスタンスを返します。 。同様に、

map

オペレーションによって返されたコレクションに Eloquent モデルが含まれていない場合、コレクションは自動的にコレクション基本クラスに変換されます。

#利用可能な方法

コレクション基本クラス

すべてのEloquentオブジェクトは基本Laravelコレクションオブジェクトを継承するため、コレクション基本クラスによって提供されるすべての強力なメソッドも継承します:

all
average
avg
chunk
collapse
combine
concat
contains
containsStrict
count
crossJoin
dd
diff
diffKeys
ダンプ

各スプレッド
すべて
例外
フィルタ
ファースト
フラットマップ
フラット
フリップ
忘れ
forPage
get
groupBy
has
implode
intersect
isEmpty
isNotEmpty
keyBy
keys
last
map
mapInto
mapSpread
mapToGroups
mapWithKeys
max
median
merge
min
mode
nth
only
pad
partition
pipe
pluck
pop
prepend
pull
push
put
random
reduce
reject
reverse
search
shift
シャッフル
slice
some
sort
sortBy
sortByDesc
splice
split
sum
take
tap
toArray
toJson
transform
union
unique
uniqueStrict
unless
values
when
where
whereStrict
whereIn
whereInStrict
whereNotIn
whereNotInStrict
zip

##カスタム コレクション

独自の拡張メソッドで必要な場合は、カスタム コレクションを使用します。

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 メソッドをオーバーライドする必要があります。

この記事は、