Я работаю над проектом Laravel, где мне нужно получить некоторые данные, суммировать столбцы и сгруппировать результаты в формате My (Jan-19) для отображения на месячной диаграмме в виде столбчатой диаграммы.
Я смог успешно собрать и сгруппировать данные, но проблема в том, что за месяцы без каких-либо записей я все еще хочу отображаться на графике с общим значением, равным 0.
Это мой текущий подход:
$data = $this->user->income()
->whereBetween('game_date', ['2019-01-01', '2019-04-30'])
->selectRaw('sum(total_score) as score,
sum(total_stars) as stars,
MONTH(game_date) as month,
DATE_FORMAT(game_date,"%b") as month_name
')
->groupBy('month', 'month_name')
->get();
Это дает мне следующий результат (пропущенные месяцы без каких-либо записей):
[
{
"score": "707",
"stars": "64",
"month": 1,
"month_name": "Jan"
},
{
"score": "200",
"stars": "29",
"month": 3,
"month_name": "Mar"
}
]
И ожидаемый результатвключая пропущенные месяцы для создания визуально четкого графика в виде:
[
{
"score": "707",
"stars": "64",
"month": 1,
"month_name": "Jan"
},
{
"score": "0",
"stars": "0",
"month": 2,
"month_name": "Feb"
},
{
"score": "200",
"stars": "29",
"month": 3,
"month_name": "Mar"
},
]
Обратите внимание, что ->whereBetween('game_date', [])
всегда будет иметь даты с начала месяца и до конца месяца (охватывая полные месячные записи).