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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

0回答

809閲覧

Laravelでのデータベースからのデータ取得処理について

parapra

総合スコア14

Laravel

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/12/09 12:18

編集2019/12/09 22:05

現在laravelの学習を行なっています。
そこで下記のようなテーブルを3つ用意しました。

User
|user_id|tantou_id|name|age|
|:--|:--:|--:|
|1|1|本田|21|
|2|1|山田|22|
|3|2|岡本|23|
|4|2|田中|24|
|5|3|山本|25|
|6|3|坂本|26|

Tantou

tantou_idtantou_name
1担当A
2担当B
3担当C

goods
|goods_id|user_id|goods_name|tyumon_day|cancel_day|toutyaku_day|
|:--|:--:|--:|
|1|1|商品A|2019-10-11||2019-10-19|
|2|1|商品B|2019-10-14|2019-10-19||
|3|2|商品C|2019-06-11||2019-06-13|
|4|2|商品D|2019-07-11||2019-07-14|
|5|3|商品E|2019-09-11|2019-09-15||
|6|3|商品F|2019-02-11|2019-02-11||
|7|4|商品G|2019-10-12||2019-10-20|
|8|4|商品H|2019-10-12||2019-10-22|
|9|5|商品I|2019-10-12||2019-10-30|
|10|5|商品J|2019-10-12||2019-10-24|
|11|6|商品K|2019-10-12||2019-10-18|
|12|6|商品L|2019-10-12||2019-10-27|

これら3つのテーブルを使って担当者ごとにユーザーの注文した商品の数の集計を出したいです。
また出す時に到着したもの、キャンセルされたものは別のものとしてカウントしたいです。
toutyaku_dayにデータがあればカウント、cancel_dayにデータがあればキャンセルしてとカウントする。

例として出すならば
担当者Aさんの担当しているユーザーはuser_idが1,2の2名になります。
この担当者Aさんの利用者が注文した商品は商品A,商品B,商品C、商品Dになります。
この時に集計結果として{tantou_name:担当者A,toutyaku_count:3,cancel_count:1}のような結果が欲しいです。

それぞれモデルはこのように設定しています。

laravel

1class User extends Model 2{ 3 protected $table = 'User'; 4}

laravel

1class Tantou extends Model 2{ 3 protected $table = 'Tantou'; 4}

laravel

1class goods extends Model 2{ 3 protected $table = 'goods'; 4}

試したこととしては

laravel

1 2$tantou = Tantou::select('tantou_id')->get(); 3 4$shouhin = User::whereIn('tantou_id',$tantou)- 5 >leftjoin('Tantou','User.tantou_id','Tantou.tantou_id') 6 ->leftjoin('goods','User.user_id','goods.user_id') 7 ->select('tantou_name',DB::raw('COUNT(goods_id) as toutyaku_count')) 8 ->groupby('tantou_name')->get();

上記のようなものを考えてはみたのですが到着とキャンセルのものをどうやって分けてカウントするのかがわかりません。

初心者で説明部分も至らない点もあるかと思いますがご教授いただけると幸いです。

追記
laravelのバージョンアップは5.5です。

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

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

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

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

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

m.ts10806

2019/12/09 21:23

Laravelのバージョンを質問本文に追記してください
parapra

2019/12/09 22:05

追加させていただきました。
退会済みユーザー

退会済みユーザー

2019/12/15 04:38

データ部設計の問題も含めた回答でもいいですか?
parapra

2020/01/06 11:05

長い間返答できなくてすみません。 含めた回答で大丈夫です!ありがとうございます
退会済みユーザー

退会済みユーザー

2020/01/06 11:17 編集

質問 1. 担当者とは、営業担当のようなものですか? 2. 担当者はログインは必要ない? 3. User = 顧客? 4. 商品マスタは持たないの? 5. 注文データ(goods)に、個数や、単価、価格がないようですが?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問