Doctrine2 QueryBuilder具有max(字段)IS NULL

时间:2014-02-27 17:59:52

标签: mysql doctrine-orm

如何使用Doctrine2 QueryBuilder执行以下操作?

$qb->select('o, MAX(r.performanceDate) AS HIDDEN maxPerformanceDate')->
            from("Officer",'o')->
            leftJoin("o.reports",'r',Join::ON,'')->
            // andWhere('r.performanceDate is NULL OR maxPerformanceDate < :date OR maxPerformanceDate > :currentMonthDate')-> // does not work either, can't "WHERE" an aggregate function
            having('maxPerformanceDate < :date OR maxPerformanceDate > :currentMonthDate')->
            orHaving('maxPerformanceDate is null')-> // error here
            addOrderBy('r.performanceDate','ASC')->
            addOrderBy('o.name','ASC')->
            groupBy("o.id")
            // .. setParamters, etc.
        ;

当我执行代码时,出现错误:

Doctrine\ORM\Query\QueryException : [Semantical Error] line 0, col 293 near 'maxPerformanceDate': Error: 'maxPerformanceDate' does not point to a Class.

我已经使用MySQL手动尝试了它,它可以工作。任何变通方法都表示赞赏。首选项不是必须下载到使用本机SQL。

完整的表定义可以在我的另一个问题中找到:

SQL SELECT data between two related tables NOT within a certain date range

1 个答案:

答案 0 :(得分:1)

这是Doctrine2中的一个错误。它已在最新的dev学科中修复,但在2.5之前不会发布。

http://www.doctrine-project.org/jira/browse/DDC-1858