Есть простая таблица
source | type | price
1 | нал | 100
1 | нал | 200
1 | безнал | 150
2 | нал | 150
2 |безнал| 400
2 |безнал| 500
Хочу получить сводную таблицу сумм с двойной группировкой.
array (2)
- source 1 array (2)
-- нал 300
-- безнал 150
- source 2 array (2)
-- нал 150
-- безнал 900
и т.д.
return DB::table('orders')
->select('source','type', DB::raw('sum(price) as total_price'))
->whereBetween('created_at', array(Carbon::yesterday()->startOfDay(), Carbon::yesterday()->endOfDay()))
->groupBy('source','type')
// ->groupBy('type')
->get();
UPD:
Сейчас я получаю...
array:3 [▼
0 => {#185 ▼
+"source": "1"
+"type": "Безнал"
+"total_price": 433.0
+"total_cash": 433.0
}
1 => {#189 ▼
+"source": "1"
+"type": "Нал"
+"total_price": 661.0
+"total_cash": 350.0
}
2 => {#190 ▼
+"source": "2"
+"type": "Нал"
+"total_price": 455.0
+"total_cash": 0.0
}
]
соответственно мне бы нужно сгруппировать 1 и 2 массивы...
UPD2:
Вот что получилось сделать.... запрос тот же, но применил коллекцию...
$sum=collect($this->orders->forUserSum($request->user()));
$grouped = $sum->groupBy('source');
$grouped->toArray();
dd($grouped);
Результат.
Collection {#177 ▼
#items: array:2 [▼
"1" => Collection {#189 ▼
#items: array:2 [▼
0 => {#191 ▼
+"source": "1"
+"type": "Безнал"
+"total_price": 433.0
+"total_cash": 433.0
}
1 => {#192 ▼
+"source": "1"
+"type": "Нал"
+"total_price": 661.0
+"total_cash": 350.0
}
]
}
"2" => Collection {#185 ▼
#items: array:1 [▼
0 => {#193 ▼
+"source": "2"
+"type": "Нал"
+"total_price": 455.0
+"total_cash": 0.0
}
]
}
]
}
сильный колхоз? "прямее" можно?