Eloquent: 集合
簡介
通過 Eloquent 來返回的多結果集是一個 Illuminate\Database\Eloquent\Collection 對象,這包括通過使用 get 方法或者通過訪問關聯(lián)模型所獲得的結果。Eloquent 的集合對象繼承自 Laravel 的 基礎集合,所以它自然地繼承了幾十種流暢執(zhí)行的方法來與 Eloquent 模型的底層數(shù)組進行交互。
當然,所有的集合都可作為迭代器使用,這允許你像普通數(shù)組一樣對他們進行循環(huán)操作:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
事實上,集合要比數(shù)組強大的多,它提供了多種強大的接口方法可以直觀的鏈式調(diào)用。比如,讓我們刪除所有未激活的用戶,并且收集所有保留用戶的首個名字:
$users = App\User::where('active', 1)->get();
$names = $users->regect(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
注意:大多數(shù)的 Eloquent 集合方法都會返回一個 Eloquent 集合的實例,而
pluck,keys,zip,collapse,flatten和flip方法返回基礎集合的實例。
可用的方法
所有的 Eloquent 集合都繼承自 Laravel Collection 對象。因此,所有繼承自基礎集合類的強大方法都是可用的。
自定義集合
如果你需要使用自定義的 Collection 對象和自己的擴展方法,你需要在你的模型中復寫 newCollection 方法:
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Create a new Eloquent Collection instance.
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
一旦你定義完成 newCollection 方法,那么無論什么時候,Eloquent 返回的模型的 Collection 實例都會獲取都你所自定義的集合。如果你想要應用中所有的模型都使用自定義的集合,那么你需要在所有模型所繼承的基類中復寫 newCollection 方法。