Eloquent 集合


##可用的方法

  • 自訂集合
  • #簡介
Eloquent 傳回的所有多結果集都是

Illuminate\Database\Eloquent\Collection 物件的實例,包括透過get

方法檢索或透過訪問關聯關係所獲得的結果。 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
,

flattenflip 方法除外,它們會傳回一個集合基底類別實例。同樣,如果 map 運算傳回的集合不包括任何 Eloquent 模型,那麼它會被自動轉換成集合基底類別。 可用的方法

集合基底類別

所有Eloquent 都繼承了基礎的Laravel 集合物件;因此,它們也繼承了所有集合基底類別提供的強大的方法:

all
average
avg
chunk
collapse
combine
concat
contains
containsStrict
count
crossJoin
dd
diff
diffKeys
dump
each
eachSpread
every
except
filter
first
flatMap
flatten
flip
forget
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
shuffle
slice
some
sort
sortBy
sortByDesc
splice
split
sum
take
tap
toArray
toJson
transform
union
unique
uniqueStrict
unless
values
when
where
whereStrict
whereIn
whereInStrict
whereNotIn
#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 方法。
本篇首刊在
LearnKu.com### 網站上。 ######