@ Alun, вот пример того, как вы можете сделать это:
SELECT `dateList`.`Date`,
CASE WHEN `yt`.`date` IS NULL THEN 0
ELSE COUNT(`yt`.`id`)
END AS `amt`
FROM
-- this is the part you can copy/paste
-- to be used to left join in a table of your choice
-- ---------------------------------------------------------------------------------------------------------------------------
(
SELECT `a`.`Date`
FROM (
SELECT NOW() - INTERVAL (`a`.`a` + (10 * `b`.`a`) + (100 * `c`.`a`)) DAY AS `Date`
FROM (SELECT 0 AS `a` UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS `a`
CROSS JOIN (SELECT 0 AS `a` UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS `b`
CROSS JOIN (SELECT 0 AS `a` UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS `c`
) AS `a`
WHERE `a`.`Date` BETWEEN '2020-04-01' AND NOW()
) AS `dateList`
-- ---------------------------------------------------------------------------------------------------------------------------
LEFT JOIN `yourTable` AS `yt` ON `dateList`.`Date` = DATE(`yt`.`date`)
GROUP BY `dateList`.`Date`
ORDER BY `dateList`.`Date` ASC
Просто подставьте имя вашей таблицы вместо yourTable
в этом запросе (изменив имя столбца даты из вашей таблицы, заменив yt.date
соответственно), и это даст вам список для каждого дня месяца, показывающий 0 для любого дня месяца, который не имеет никакого значения.
Если заставить это работать с помощью eloquent в Laravel контроллере, это может быть возможно, но, черт побери, я не знаю, как вы это сделаете. Вы можете использовать этот необработанный SQL в контроллере для выполнения sh того, что вы хотите.
Вот пример того, как это работает в sql fiddle.
Надеюсь, это поможет!