前提
簡単なシステムを作成しています。Larabelでテーブルの結合をさせたいのですが、上手くできずにいます。
実現したいこと
3つのテーブルを結合させたいです。
実現したいテーブル
会社テーブル
ID | 名前 | 日付 |
---|---|---|
1 | 〇〇会社 | 2025/2/8 |
2 | ××会社 | 2022/12/08 |
3 | △△会社 | 2024/11/30 |
画像テーブル
ID | 画像 | 会社ID |
---|---|---|
1 | aaa.png | 1 |
2 | bbb.png | 2 |
3 | ccc.png | 3 |
金額テーブル
ID | 金額 | 会社ID |
---|---|---|
1 | 250 | 1 |
2 | 580 | 2 |
3 | 20 | 3 |
1 | 18 | 1 |
2 | 22 | 2 |
3 | 62 | 3 |
発生している問題・エラーメッセージ
Method Illuminate\Database\Eloquent\Collection::toSql does not exist.
該当のソースコード
//1.会社テーブルと画像テーブルの結合 $subquery1 = Company::select(DB::raw( ' Company.id as id , Company.name as name , Company as date , Image.img_path as image ' )) ->join('Image', 'Image.company_id', '=', 'Company.id') ->get(); //2.経費のグループ化して、金額の取得 $subquery2 = Cost::select('company_id', DB::raw('MAX(price)'), DB::raw('MIN(price)'))) ->groupby('company_id')->get(); //1.と2.のテーブルを外部結合させる $query = DB::table(DB::raw("({$subquery1->toSql()}) as s1")) ->leftjoin(DB::raw("({$subquery2->toSql()}) as s2"), function ($join) { $join->on('s1.id', '=', 's2.company_id'); }) ->mergeBindings($subquery1) ->mergeBindings($subquery2); $new_opens = $query->get();
試したこと
データをデバックでとってみたところ、$subquery1 と$subquery2については
データは取れてました。
補足情報(FW/ツールのバージョンなど)
このページを参考にしました。
https://www.unagino-nedoko.com/laravel/subquery-whereかきました
0 コメント