Laravelのv5.6から、EloquentモデルにfromSub()という便利な機能を提供されています。そのため、RDBでViewを作らずとも同じことが実現できます。table_nameを付与すれば同じように実装ができます。今回は、fromSub()を使用してEloquentモデルを定義していきます。例として、注文(order)した商品(item)の価格(price)の合計金額(subtotal)を取得するEloquentモデル(OrderSubtotal)を新しく定義してみます。注文(order)には複数の商品(item)が1対多で紐付き、下記のようなテーブル構造を想定しています。}}作成したEloquentモデルは下記のように使用できます。$orderSubtotal->subtotal;この方法を使用することにより、テーブルとしては存在しない概念をモデルとして定義することができました。モデルとして定義できたことにより、hasOne、hasMany、belongsToManyのリレーションを利用できるようになっています。$order->orderSubtotal->subtotal;リレーション、クエリスコープも使えるので、通常のEloquentモデルと同様にとても柔軟な実装ができるようになっています。今回の例では簡単なクエリでしたが、もっと複雑な集計や計算にも耐えうる実装になっています。Apiの結果をモデルとして定義したいApiからデータを取得する機会も多いと思います。取得した結果を配列やstdClassとして使用している人は多いのではないでしょうか。配列やstdClassで扱っていると、メソッドが定義できないため、View、Controllerなどでデータの結合や計算が行われがちになります。先程の問題でもあったモデルにメソッドが定義できないドメインモデル貧血症がまさにここでも起きています。そんな時には、jessenger/modelを検討してみましょう。Apiの結果を簡単にモデルとして定義することができます。例としてGitHubのoctcatのリポジトリの結果をモデルにしてみます。}}使い方は下記になります。Eloquentモデルとほぼ同じように扱うことができます。'\n';})このようにモデルとして定義できると、ロジックをモデルに集約することが可能になります。GETやPOSTでリクエストされた情報を変換して使いたい一覧で複数のIDを検索したいという要望があり、カンマ区切りで指定できるようにする場合もあるかと思います。何も考えずに実装した場合、Controllerでデータを正規化する処理を書いてしまいがちですが、そのような処理は、Requestクラスで行うようにするとスマートです。下記のようにカンマ区切りのデータをよしなに変換できるメソッドを定義してみましょう。}}Requestクラスで正規化することにより、Controllerに処理を書かずともIDの一覧が取得できるようになりました。}}最近では、SPAで開発している場合もあり、ブラウザ側でリクエストする際の値を最適化できる機会も増えましたが、JavaScriptを使用するほどではないアプリケーションを開発している時などであれば、このような解決方法も検討してみてはどうでしょうか。まとめ今回の4つのTipsはすべてテスタビリティの向上に役に立ちます。考え方や実装方法を少し変えるだけで、可読性も向上します。requestStockLike10@pakkunFollow株式会社オープンロジ物流はこれから、テクノロジーによりダイナミックに変化する業界です。物を作る人とそれを欲しい人、その間の物流や配送がすべてネットワーク化された、需要と供給が最適化される次世代のインフラづくりを私たちは目指しています。upLoginユーザーは見つかりませんでした。