Как использовать построитель запросов Symfony для создания счетчика диапазона дат и заполнения пробелов нулями - PullRequest
0 голосов
/ 18 октября 2019

У меня есть запрос, который подсчитывает пользователя, группируя его по дате регистрации.

return $this->createQueryBuilder('s')
->select(' date(s.created_at) as x, count(1) as y')
->where("s.created_at between datesub(now(), :months, 'Month') and now()")
->setParameter('months', $months)
->groupBy('x')
->orderBy('x')
->getQuery()
->getResult();

Но в настоящее время в моем наборе данных есть пробелы.

Итак, у меня есть запрос sql кзаполнить пробелы, но я не знаю, как создать сложный запрос с помощью построителя запросов Symfony.

SELECT ranger.ranger_date AS x, COALESCE(counter.counter_value, 0) as y
FROM (
    SELECT DATE(s.created_at) AS counter_date, count(*) AS counter_value
    FROM statistic AS s
    WHERE s.created_at between DATE_SUB(NOW(), INTERVAL 3 MONTH) and now()
    GROUP BY counter_date
) AS counter
RIGHT JOIN (
    SELECT DATE(DATE_SUB(NOW(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY)) AS ranger_date
    FROM (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
    CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens
    CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)hundreds
    WHERE DATE_SUB(NOW(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW()
) AS ranger
ON ranger.ranger_date = counter.counter_date
ORDER BY ranger.ranger_date

Я уже пробовал с помощью метода createQuery, но он не работал ...

1 Ответ

1 голос
/ 21 октября 2019

Если ваш сложный собственный SQL-запрос успешно возвращает нужный набор результатов:

Вы можете просто подготовить и выполнить запрос, как описано в документации Symfony .
Если вам нужнотогда вы можете использовать класс NativeQuery .

...