- ベストアンサー
Laravelクエリビルダでサブクエリ同士JOIN
Laravel11を使用しております。クエリビルダで、テーブルとサブクエリをJOINするにはjoinSub()やleftJoinSub()を使えばいいのですが、サブクエリとサブクエリをJOINするにはどうすればいいか分かりません。いろいろなドキュメントを見ていますが、どれもDB::table()から始まるものばかりで、テーブルとのJOINを想定したものばかりです。 サブクエリとサブクエリをJOINする方法をご存じの方、教えて下さるようお願いします。それとも、できないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
それなら↓ですかね。 https://www.larajapan.com/2021/08/03/from%E5%8F%A5%E3%81%AE%E3%82%B5%E3%83%96%E3%82%AF%E3%82%A8%E3%83%AA/ Joiningで繋げればって感じですかね。動く環境は手元に無いので、いけるだろうで回答してます。 https://qiita.com/yoshinyan/items/09ccddda3da05ed6fe5b
その他の回答 (1)
- type0(@type0)
- ベストアンサー率56% (344/611)
回答No.1
DB::rawやQuery Builderのメソッドで出来ると思います。 https://qiita.com/sato_ryu/items/1033fe51b886622a6dda githubからサンプルプログラムもダウンロード出来ますので、参考になると思います。 ※こちらでは、今はLaravel動く環境が手元に無いので、動作確認はしてません。
質問者
補足
ありがとうございます。見てみましたが、JOINの右側がサブクエリで、左側はテーブルですね。しかし私は、JOINの左側をサブクエリにしたいのです。あと、なるべくDB::raw()は使いたくない。。。
お礼
ありがとうございます!DB::query()->fromSub()ってできるんですね。 $sq1 = DB::table('test1') ->where('column1', '=', 100); $sq2 = DB::table('test2') ->where('column2', '=', 200); $query = DB::query() ->fromSub($sq1, 'sq1') ->joinSub($sq2, 'sq2', function($join) { $join->on('sq1.column3', '=', 'sq2.column3'); }) ->get(); こんな感じでやったらうまく行きました!どうもありがとうございます!