Doctrine QueryBuilder HAVING表达式

时间:2016-04-13 15:30:27

标签: php mysql symfony doctrine-orm doctrine

好的,所以我正在使用Doctrine ORM(2.5)重写一些代码。

旧代码创建的查询类似于:

SELECT * FROM couples INNER JOIN individuals ON (couples.id = individuals.couple_id)
GROUP BY couples.id
HAVING SUM(individuals.date_of_birth <= '1976-01-01') > 0

我不知道如何使用Doctrine QueryBuilder实现这一目标。这是一个非常简化的示例,真正的查询更长,并且有一些HAVING子句,所有子句都使用SUM(some_condition) > 0来确保只检索包含匹配个体的Couples。

我可以使用$queryBuilder->having()在Doctrine中添加子句,但我不能使用SUM()函数。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

实际上,没有什么能阻止您将sumhaving一起使用:

$queryBuilder
    ->select('couple, individual')
    ...
    ->having('sum(individual.date_of_birth) > 0');

查询构建器的sum()函数实际上接受两个参数并返回一个不是你所追求的数学表达式。

在上述示例中的字段上使用sum时,实际上是聚合函数。

在您的情况下要记住的另一件事是,根据documentation,每个having()调用都会覆盖之前设置的所有条件。 因此,如果您想使用其中的多个,请使用andHavingorHaving

我希望这可以解释它。