はじめに
Eloquentで複数件のモデルを取得すると、結果はIlluminate\Database\Eloquent\Collection として返ります。これは
Illuminate\Support\Collection を継承しているため、ベースコレクションのメソッドをそのまま使えます。
利用可能なメソッド
Eloquent\Collection はベースコレクションのすべてのメソッドを継承し、さらにモデル向けメソッドを追加します。
append / withoutAppends / setAppends
シリアライズ時の追加属性(appends)をコレクション全体に対して操作できます。
contains / diff / except / intersect / only
モデルインスタンスや主キーを基準に、包含判定・差集合・積集合・除外・抽出を行います。
find / findOrFail
取得済みコレクションから主キーでモデルを検索します。
fresh
コレクション内の各モデルを、データベースの最新状態で再取得します。
load / loadMissing
取得済みコレクションに対して、後からリレーションをEager Loadingできます。
modelKeys
コレクション内モデルの主キー一覧を取得します。
makeVisible / makeHidden / mergeVisible / mergeHidden / setVisible / setHidden
シリアライズ時の可視属性・非可視属性を、コレクション単位で調整できます。
partition
条件で2つの Eloquent\Collection に分割し、外側は Illuminate\Support\Collection として返します。
toQuery
取得済みモデル群の主キーに対する whereIn クエリを作り、まとめて更新や削除に使えます。
unique
同じ主キーを持つ重複モデルを取り除きます。
Eloquentコレクションからベースコレクションへの変換
collapse、flatten、flip、keys、pluck、zip は Illuminate\Support\Collection を返します。また、
map の結果にEloquentモデルが含まれない場合もベースコレクションへ変換されます。
カスタムコレクション
モデル専用のコレクションクラスを使いたい場合は、まず#[CollectedBy] 属性を使う方法を選ぶと明快です。
#[CollectedBy] 属性(推奨)
newCollection() メソッド(代替)
newCollection() または #[CollectedBy] を定義すると、通常 Eloquent\Collection が返る場面でカスタムコレクションが返るようになります。全モデルに適用したい場合は、共通のベースモデルで
newCollection() を定義します。
関連ページ
コレクション
Illuminate\\Support\\Collection の基本操作を先に確認します。Eloquent入門
モデルとクエリの基礎を整理してからEloquentコレクションを使いましょう。