按日排序()Doctrine Symfony2

时间:2015-08-10 23:55:34

标签: symfony doctrine-orm doctrine-extensions

我使用Beberlei DoctrinExtensions Bundle在Symfony2上使用DAY(),MONTH()和YEAR()进行查询。

一切都适用于选择。但是,当我尝试制作一些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 个答案:

答案 0 :(得分:0)

我相当确定你不能在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 page上隐藏了类似的例子。