laravel 基礎教程 —— Eloquent 集合

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 集合的實例,而 pluckkeys,zip,collapse,flattenflip 方法返回基礎集合的實例。

可用的方法

所有的 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 方法。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容