🐡

Collection型がちょっと楽しい。

2024/01/11に公開

Collection型について

最近Collection型を取り扱うことが増えてきたので気になったところを書いていく。

一口にCollection型と言っても二つある。

Illuminate\Database\Eloquent\Collection
Illuminate\Support\Collection

Eloquentの方はModelで設定した型がこれにあたる。
個人的にはこっちの方が好き。

!が効かない。

Collection型に対して、これに何かしら入っていれば大体

if ($collection) {

これで通ると思ってた。
或いは

if (!!$collection) {

これ。
Collection型に値が入っていようが入っていまいがtrueになってしまう。
癖つよ。
判断できるものとして

count() Collection内のデータ数(int)
isEmpty() Collectionが空かどうか(bool)

などがある。
もっとシンプルに書ける方法は無いのか。

抽出が楽

普段は

「条件A、条件Bで取得する」

という関数を作成していた。
Collection型を意識する事で

1.「全部取得する」
2.「1の関数で取得してきたデータを条件A、条件Bで抽出」

この形でできるようになった。
この取得関数をいろんな場所で使い回せる!
何より抽出が重くない!

mapとeach

collectionB = collectionA->map(function (item) {
item->example = 'test';
});
mapは新しいコレクションの作成とのこと。
この記述では「example」というプロパティを追加して、'test'という文字列を入れてる。
プロパティを追加するので、collectionAを元にcollectionBを作成している。

じゃあeachは?
collectionC = collectionA->each(function ($item) {
item->example = 'test';
});

collectionCを出力するとcollectionBと同じ結果になる。
通常の繰り返し文と同じような仕組みと思ってたのにeachくん、君そんな動きもできるの・・・・・・?
なんならmapくんも繰り返し文と同じ挙動する。

正直楽しい。地味に癖がある部分も含めて楽しい。
使い方次第ではあるけど、もっと色んな使い方を覚えたい。

Discussion