Заказ до Дня () Доктрина Symfony2
Я использую https://github.com/beberlei/DoctrineExtensions для выполнения запросов с DAY(), MONTH() и YEAR() в Symfony2.
Все работает на выбор. Но когда я пытаюсь сделать OrderBy, я получаю синтаксическую ошибку.
Вот мой код:
SELECT a FROM AppUserBundle:User a WHERE MONTH(a.dataNascimento) >= MONTH(CURRENT_DATE())
AND DAY(a.dataNascimento) >= DAY(CURRENT_DATE())
ORDER BY DAY(a.dataNascimento)
И ошибка:
[Syntax Error] line 0, col 151: Error: Expected end of string, got '('
Без предложения ORDER BY запрос работает.
Кто-то может мне помочь?
1 ответ
Решение
Я уверен, что вы не можете использовать функции в DQL ORDER BY
пункты (даже если вы можете в SQL). Способ обойти это, чтобы добавить поле к вашему SELECT
пункт с HIDDEN
так что Doctrine не возвращает это и переводит ваши результаты в смешанный режим. Таким образом, ваш DQL будет:
SELECT a, DAY(a.dataNascimento) AS HIDDEN myday
FROM AppUserBundle:User a
WHERE MONTH(a.dataNascimento) >= MONTH(CURRENT_DATE())
AND DAY(a.dataNascimento) >= DAY(CURRENT_DATE())
ORDER BY myday
Doctrine никогда явно не заявляет об этом в своей документации, однако подобный пример скрыт на странице DQL.