Заказ до Дня () Доктрина 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.

Другие вопросы по тегам