質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

419閲覧

Laravel サブクエリ データを外部結合させたい 3つのデータを結合

ai9376451

総合スコア15

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/10/07 10:59

前提

簡単なシステムを作成しています。Larabelでテーブルの結合をさせたいのですが、上手くできずにいます。

実現したいこと

イメージ説明
3つのテーブルを結合させたいです。
実現したいテーブル

会社テーブル

ID名前日付
1〇〇会社2025/2/8
2××会社2022/12/08
3△△会社2024/11/30

画像テーブル

ID画像会社ID
1aaa.png1
2bbb.png2
3ccc.png3

金額テーブル

ID金額会社ID
12501
25802
3203
1181
2222
3623

発生している問題・エラーメッセージ

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かきました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

簡単なシステムを作成しています。Larabelでテーブルの結合をさせたいのですが、上手くできずにいます。

簡単なシステムと言いながら、実装を無駄に難しくしています。
Laravel を普通に使っていれば、DB::table() などは使わなくてすみます。
Laravel の作法に従って実装すれば、以下の記述だけで全ての値が取得できます。

php

1$companies = Company::query() 2 ->with(['images', 'costs']) 3 ->get()

現在の実装でおかしい点

  • Model を正しく作っているか

php artisan make:model Company -a と作れば、migration, factory, model, controller など必要なファイルが一度に作られる。もちろん命名規則も正しく。

  • table 名が単数形になっている。(複数形であるべき)
  • モデルにリレーションを定義すれば、クエリに join() など使うことはほとんどない

Laravel で読むべきサイト

投稿2022/10/07 15:20

編集2022/10/07 15:23
phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問