現在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_id | tantou_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です。