集合

2018-02-24 15:52 更新

所有 Eloquent 查詢返回的數(shù)據(jù),如果結(jié)果多于一條,不管是經(jīng)由 get 方法或是 relationship,都會(huì)轉(zhuǎn)換成集合對(duì)象返回。這個(gè)對(duì)象實(shí)現(xiàn)了 IteratorAggregate PHP 接口,所以可以像數(shù)組一般進(jìn)行遍歷。而集合對(duì)象本身還擁有很多有用的方法可以操作模型數(shù)據(jù)。
確認(rèn)集合中里是否包含特定鍵值

例如,我們可以使用 contains 方法,確認(rèn)結(jié)果數(shù)據(jù)中,是否包含主鍵為特定值的對(duì)象。

$roles = User::find(1)->roles;
if ($roles->contains(2))
{
    //
}

集合也可以轉(zhuǎn)換成數(shù)組或 JSON:

$roles = User::find(1)->roles->toArray();
$roles = User::find(1)->roles->toJson();

如果集合被轉(zhuǎn)換成字符串類型,會(huì)返回 JSON 格式:

$roles = (string) User::find(1)->roles;

集合遍歷

Eloquent 集合里包含了一些有用的方法可以進(jìn)行循環(huán)或是進(jìn)行過濾:

$roles = $user->roles->each(function($role)
{
    //
});

集合過濾

過濾集合時(shí),回調(diào)函數(shù)的使用方式和 array_filter 里一樣。

$users = $users->filter(function($user)
{
    return $user->isAdmin();
});

注意: 如果要在過濾集合之后轉(zhuǎn)成 JSON,轉(zhuǎn)換之前先調(diào)用 values 方法重設(shè)數(shù)組的鍵值。

遍歷傳入集合里的每個(gè)對(duì)象到回調(diào)函數(shù)

$roles = User::find(1)->roles;
$roles->each(function($role)
{
    //
});

依照屬性值排序

$roles = $roles->sortBy(function($role)
{
    return $role->created_at;
});

依照屬性值排序

$roles = $roles->sortBy('created_at');

返回自定義的集合對(duì)象

有時(shí)您可能想要返回自定義的集合對(duì)象,讓您可以在集合類里加入想要的方法??梢栽?Eloquent 模型類里重寫 newCollection 方法:

class User extends Model {
    public function newCollection(array $models = [])
    {
        return new CustomCollection($models);
    }
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)