鍍金池/ 教程/ PHP/ 集合
門面
Laravel Homestead
安裝及配置
測(cè)試
HTTP 中間件
加密
升級(jí)指南
幫助函數(shù)
應(yīng)用目錄結(jié)構(gòu)
集合
新手入門指南-簡(jiǎn)單任務(wù)管理系統(tǒng)
任務(wù)調(diào)度
查詢構(gòu)建器
視圖
驗(yàn)證
Laravel Cashier(訂購(gòu)&支付&發(fā)票)
本地化
隊(duì)列
調(diào)整器
分頁(yè)
文件系統(tǒng)/云存儲(chǔ)
貢獻(xiàn)代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請(qǐng)求
Laravel Elixir
發(fā)行版本說明
Envoy 任務(wù)運(yùn)行器(SSH任務(wù))
序列化
Session
起步
帶用戶功能的任務(wù)管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務(wù)提供者
Blade 模板引擎
包開發(fā)
用戶認(rèn)證
Artisan 控制臺(tái)
HTTP 響應(yīng)
集合
服務(wù)容器
關(guān)聯(lián)關(guān)系
一次請(qǐng)求的生命周期
契約
Redis
錯(cuò)誤&日志

集合

1、簡(jiǎn)介

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;
});

2、可用方法

所有的 Eloquent 集合繼承自 Laravel 集合基類,因此,它們繼承所有集合基類提供的強(qiáng)大方法:詳見集合有效方法列表。

3、自定義集合

如果你需要在自己擴(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 方法。

上一篇:貢獻(xiàn)代碼下一篇:包開發(fā)