※コメント欄にてLaravelの機能を利用した方法をご教授頂きました。
実装する際にはそちらを参照頂いた方がよいです。
やりたいこと
以下のようなDB設計のアプリケーションがあった場合に、あるページに会議情報の一覧とそれらに出席するユーザの人数を、それぞれの会議情報について付加して表示する。
ユーザテーブル:ユーザ情報を表現する
会議テーブル:会議の日程等の情報を表現する
ユーザ、会議テーブル:会議に出席するユーザを表現する
user
-id
-name
kaigi
-id
-date
kaigi_user
-kaigi_id
-user_id
例えば、以下のように会議室のデータをインスタンス化してビューに渡す方法が簡単です。しかし、ユーザの人数も合わせてビューに渡そうと思うと、kaigi_userのテーブルからそれぞれkaigiのkaigi_idが持つuser_idの数をcountしたデータをインスタンスに付加する必要があり、laravelに用意されているクエリビルダでは出来ないと思いました(私にはやり方がわかりませんでした)。
$kaigis = DB::table('kaigi')->get();
方法
方法としては簡単で、DB::tableの返り値は単なるオブジェクトのようです(userクラス単体のインスタンスであれば、Userというインスタンスになり、joinしたクラスで生成するとstdClassになるようです)。
PHPでは未定義のメンバ変数であっても、代入すれば自動的に定義されますので、それぞれのインスタンスにcount情報を付加すれば解決出来ます。
例えば、以下のような感じです。
foreach($kaigis as $value){
$array = DB::table('kaigi_user')->wehre('kaigi_id', '=', $value->id) -> get();
$value->sanka_user_count = count($array);
}
この例でいえば、生成したインスタンスにsanka_user_countというメンバ変数が付加されてビューに渡されますので、これをビューから参照すればよいです。
(他にもやり方がありそうです。もっとよいやり方があればご教授ください。)