Я пытаюсь получить всех пользователей за последние 12 месяцев из базы данных и показать некоторую статистику с помощью диаграммы. Для этой цели я использую диаграмму JS.
$registeredUsersData = $connection->fetchAll(
'SELECT
COUNT(id) AS registered_users,
CONCAT(MONTHNAME(created_on), " ", YEAR(created_on)) AS created_on
FROM users
WHERE created_on
BETWEEN CURDATE() - INTERVAL 12 MONTH AND CURDATE()
GROUP BY YEAR(created_on), MONTH(created_on)
ORDER BY YEAR(created_on) DESC, MONTH(created_on) DESC;
');
Мы передаем ее по symfony контроллер и рендер html шаблон.
$registeredUsersCount = array_column($registeredUsersData, 'registered_users');
$registeredUserMonths = array_column($registeredUsersData, 'created_on');
return $this->render('dashboard/admin/index.html.twig', [
'registered_users_count' => $registeredUsersCount,
'registered_users_months' => $registeredUserMonths
]);
В шаблоне я пытаюсь отобразить с помощью гистограммы, что данные, где год и месяц должны быть объединены, отображаются на абсциссе (X- по оси) и соответственно по ординате (ось Y).
<div class="chart-container">
<canvas id="canvas"></canvas>
</div>
let months = {{ registered_users_months|json_encode|raw }};
let users = {{ registered_users_count|json_encode|raw }};
const ctx = document.getElementById('canvas').getContext('2d');
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: months,
datasets: [{
label: 'Registered Users Monthly',
data: users,
backgroundColor: 'rgba(90, 80, 191, 0.2)',
borderColor: 'rgba(90, 80, 191, 1)',
borderWidth: 1
}]
},
options: {
maintainAspectRatio: false,
responsive: true,
scales: {
yAxes: [{
ticks: {
beginAtZero: true
},
}]
}
}
});
Данные отображаются правильно, но отображаются не все"предыдущие" 12 месяцев. Если месяц не отображается у зарегистрированных пользователей это должно также отображаться , но с счетчиком нуля. К сожалению, данный запрос в настоящее время не поддерживает эту функцию, как я могу ее изменить?