我使用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子句,查询将起作用。
有人可以帮助我吗?
答案 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上隐藏了类似的例子。