Eloquent 集合
Eloquent 集合
Eloquent : 集合
簡介
Eloquent 返回的所有多結(jié)果集都是 Illuminate\Database\Eloquent\Collection
對象的實例,包括通過 get
方法檢索或通過訪問關聯(lián)關系獲取到的結(jié)果。 Eloquent 的集合對象繼承了 Laravel 的 集合基類,因此它自然也繼承了數(shù)十種能優(yōu)雅地處理 Eloquent 模型底層數(shù)組的方法。
而且,所有的集合都可以作為迭代器,你可以像遍歷簡單的 PHP 數(shù)組一樣來遍歷它們:
$users = App\User::where('active', 1)->get(); foreach ($users as $user) { echo $user->name; }
不過,集合比數(shù)組更加強大,它通過更加直觀的接口暴露出可鏈式調(diào)用的 map /reduce 等操作。例如,讓我們移除所有未激活的用戶并收集剩余用戶的名字:
$users = App\User::all(); $names = $users->reject(function ($user) { return $user->active === false; })->map(function ($user) { return $user->name; });
{note} 大多數(shù) Eloquent 集合方法會返回新的 Eloquent 集合實例,但是
pluck
,keys
,zip
,collapse
,flatten
和flip
方法除外,它們會返回一個 集合基類 實例。同樣,如果map
操作返回的集合不包括任何 Eloquent 模型,那么它會被自動轉(zhuǎn)換成集合基類。
可用的方法
集合基類
所有 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
whereNotInStrict
zip
自定義集合
如果你需要在自己的擴展方法中使用自定義的 Collection
對象,你可以在你的模型中重寫 newCollection
方法:
<?php namespace App; use App\CustomCollection; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 創(chuàng)建一個新的 Eloquent 集合實例對象。 * * @param array $models * @return \Illuminate\Database\Eloquent\Collection */ public function newCollection(array $models = []) { return new CustomCollection($models); } }
一旦你定義了 newCollection
方法,任何時候都可以在 Eloquent 返回的模型的 Collection
實例中獲得你的自定義集合實例。如果你想要在應用程序的每個模型中使用自定義集合,則應該在所有的模型繼承的模型基類中重寫 newCollection
方法。