LoginSignup
1
0

"Higher Orderメッセージ"でCollectionの更なる高みへ

Posted at

概要

Collectionには、"Higher Orderメッセージ"なる機能が存在します。
"Higher Orderメッセージ"に対応しているCollectionメソッドを動的プロパティのように記述して処理を短くかけるというものです。
何のこっちゃと思うので例を書いてみます

例1

$users = User::all();

//before
$users->each(function (User $user){
    $user->archive();
});

//after
$users->each->archive();

beforeを"Higher Orderメッセージ"で書き直したのがafterになります。

$usersの単一の要素をeachで繰り返します。その際にarchiveをします。」

みたいな書き方。

例2

mapの場合だと

$users = User::all();

//before
$users->map(function (User $user){
    $user->profile;
});

//after
$users->map->profile;

みたいな感じ。勿論チェーンで通常のコレクションメソッドを繋げて書けます。
ユーザー達の画像コレクションの内、最初のレコードを取得する例を挙げてみましょう。

$users = User::all();

//before
$users->flatMap(function (User $user){
    $user->images;
})->first();

//after
$users->flatMap->images->first();

こんな感じに通常のコレクションを後ろから生やす事が出来ます。
flatMap->imagesの段階で出来上がるのはimageオブジェクトのフラットなコレクションですからね。

一応

$users->flatMap->images->map->user;

みたいにチェーンで繋げて動かす事も可能なようですが、firstは上手く動作しませんでした。

対応しているメソッド

average、avg、contains、each、every、filter、first、flatMap、groupBy、keyBy、map、max、min、partition、reject、skipUntil、skipWhile、some、sortBy、sortByDesc、sum、unique、takeUntil、takeWhile

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0