ここで「各ユーザーが持っているアイテムの最高金額が知りたい」という場合です。test_user_item.user_id;です。このまま書いてもいいんですが、ページネーションの時とかに少し面倒です。BYを追加しなくちゃならないのはなぁ。するのは非効率なときもあります。「今開いているページのuser_idに対応するアイテムのデータだけ取ってきたい」ってやれたらいいんじゃない?を実現したいわけです。test_user_item.user_id;みたいにしたい。すると必要なuser_idでだけデータを取得できてスピードも速いのでは?ってことですね。リレーションを設定する。loading設定です。TestUserItem)を作成します。このメソッドの中で、リレーションを書いていきます。to)でも大丈夫ですが、viewで取得するとき少しめんどくさいです。クラスで、親クラスはRelationクラスです。クラスのメソッドを呼んでるので、続いてクエリビルダーで書けるってわけですね。「リレーションを設定する」「リレーション時に発行するSQLを書く」の途中です。test_user_item.user_item」を作ります。hasOneメソッド中ではテーブル名は不要です。するだけなんですが、注意点が一つ。「JOIN時に用いるカラム」を設定しなければいけません。下の赤丸で囲んだ部分ですね。IN句を作ってるからだと思います。具体的な処理は見ていませんが。selectRawを書いてる場所を分けてるのは特に意味はないです。全部繋げて書いて大丈夫です。loadingする設定です。メソッドの引数に対応するリレーションを表すメソッド名(TestUserItem)を書きます。コントローラとビューも見てみましょう。SQLも正しく発行されています。側で気をつけなくてはいけないのは、「該当するリレーション先が存在しない場合があるときは、存在チェックを入れないといけない」ってことです。@if(isset($each_result->TestUserItem))の部分ですね。(shinoda)は、何もアイテムを持っていませんでした。未定義になってしまうので、$each_result->TestUserItem->max_resultを取得しようとしたときにエラーになります。join時の条件が複雑でindexが利かせにくい」って時だと思います。新しい」だけ欲しいって時ですね。履歴系テーブルの最新情報だけ欲しいみたいなときにいいかもしれないです。