0

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

有人可以帮助我吗?

4

1 回答 1

0

我相当确定您不能在 DQLORDER 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 页面上隐藏了一个类似的示例。

于 2015-08-11T07:22:12.403 回答