混乱してはいけないLaravelの動的プロパティ – Collection編
動的プロパティは、EloquentだけでなくCollectionにもHigher Order Message(より上級のメッセージ?)という名前で颯爽と登場します。これも最初に見たら、こんなことできるの、という感じです。混乱してはいけません。Eloquentと同様に複雑なことをしないときのコード表現に便利なメソッドの短縮形です。
動的プロパティは、EloquentだけでなくCollectionにもHigher Order Message(より上級のメッセージ?)という名前で颯爽と登場します。これも最初に見たら、こんなことできるの、という感じです。混乱してはいけません。Eloquentと同様に複雑なことをしないときのコード表現に便利なメソッドの短縮形です。
LaravelではModelやCollectionやRequestなどのクラスにおいて動的プロパティがコードの短縮形としてよく使われます。しかし、同じクラスでメソッドとして定義したものがいきなりプロパティとして使われるので、私は昔よく混乱したものです。今回はまずEloquent編として代表的な動的プロパティの活用を混乱しないように説明します。
FormRequestのバリデーションを問題なくパスしたら、コントローラで$request->validatedで配列としてフォームの入力値を取得できます。取得後の値は安全なのでそのままDBに保存することも可能です。しかし、その配列から必要のない値を抜いたり、足りない値を追加したりとかの処理はどうするかという説明です。
Collectionでのmap()とtransform()のメソッドは似ているようで大きな違いがあります。
例えば、User::paginate(5)で返されるデータは、@foreachでループできるゆえにコレクションと思いきや、そうでありません。
phpでは配列のデータをループするならforeachを使います。LaravelのCollectionでもforeachを使ってループできます。しかし、Collectionならeach()を使いましょう。
「Laravel Collection(2) Collectionを返すメソッド」ではfilterメソッドを紹介しました。今度はfilterメソッドのように条件でCollectionを絞るwhereメソッドの話です。EloquentやSQL文で慣れているならwhereの方がわかりやすいかもしれません。
Collectionの中でとても好きなメソッドは、groupBy()です。Laravelが存在しなかった時代ではよくDBクエリから返ってくる1次元の配列をグループ化するため、汚いコードを書いて2次元の配列に変換していたものです。しかし、CollectionのgroupByがあるとコードがシンプルで綺麗に書けること書けること。
前回に続き、Collectionのsortメソッドについて解説していきます。今回は複数の項目を使ったソートについてです。
そろそろ引っ越しをしようかと思い、毎日物件情報サイトを物色しているhikaruです。 物件選びは価格や広さ、築年数、その他様々な側面から比較していく必要があるのでなかなか骨の折れる作業ですね。物件情報がCollectionにまとめられていればサクッと私好み順に並び替えられるのに、としみじみCollectionのありがたみを実感している今日このごろです。 ということで、今回はCollectionのありがたいsort関連のメソッド3つ、sort, sortBy, sortKeysについて解説したいと思います。