好的,所以我正在使用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()
函数。有什么想法吗?
答案 0 :(得分:1)
实际上,没有什么能阻止您将sum
与having
一起使用:
$queryBuilder
->select('couple, individual')
...
->having('sum(individual.date_of_birth) > 0');
查询构建器的sum()
函数实际上接受两个参数并返回一个不是你所追求的数学表达式。
在上述示例中的字段上使用sum
时,实际上是聚合函数。
在您的情况下要记住的另一件事是,根据documentation,每个having()
调用都会覆盖之前设置的所有条件。
因此,如果您想使用其中的多个,请使用andHaving
和orHaving
。
我希望这可以解释它。