Eloquent 返回的所有多結(jié)果集都是 Illuminate\Database\Eloquent\Collection
對(duì)象的實(shí)例,包括通過 get 方法或者通過訪問關(guān)聯(lián)關(guān)系獲取的結(jié)果。Eloquent 集合對(duì)象繼承自 Laravel 的集合基類,因此很自然的繼承了很多處理 Eloquent 模型底層數(shù)組的方法。
當(dāng)然,所有集合也是迭代器,允許你像數(shù)組一樣對(duì)其進(jìn)行循環(huán):
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
然而,集合比數(shù)組更加強(qiáng)大,使用直觀的接口提供了各種映射/簡(jiǎn)化操作。例如,讓我們移除所有無效的模型并聚合還存在的用戶的名字:
$users = App\User::where('active', 1)->get();
$names = $users->reject(function ($user) {
return $user->active === false;})->map(function ($user) {
return $user->name;
});
所有的 Eloquent 集合繼承自 Laravel 集合基類,因此,它們繼承所有集合基類提供的強(qiáng)大方法:詳見集合有效方法列表。
如果你需要在自己擴(kuò)展的方法中使用自定義的集合對(duì)象,可以重寫模型上的 newCollection
方法:
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 創(chuàng)建一個(gè)新的 Eloquent 集合實(shí)例
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
定義好 newCollection
方法后,無論何時(shí) Eloquent 返回該模型的 Collection
實(shí)例你都會(huì)獲取到自定義的集合。如果你想要在應(yīng)用中的每一個(gè)模型中使用自定義集合,需要在模型基類中重寫 newCollection
方法。