按天排序() Doctrine Symfony2

Order By DAY() Doctrine Symfony2

我正在使用 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 子句查询有效。

有人可以帮助我吗?

我相当确定您不能在 DQL ORDER BY 子句中使用函数(尽管您可以在 SQL 中使用)。解决这个问题的方法是将字段添加到带有 HIDDENSELECT 子句中,这样 Doctrine 就不会 return 并将结果转换为混合模式。所以你的 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.

中隐藏了一个类似的示例