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,flatten
和
flip方法除外,它們會傳回一個集合基底類別實例。同樣,如果
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
自訂集合
如果你需要在自己的擴充方法中使用自訂的
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 實例中獲得你的自訂集合實例。如果你想要在應用程式的每個模型中使用自訂集合,則應該在所有的模型繼承的模型基底類別中重寫 本篇首刊在