Doctrine QueryBuilder HAVING 表达式

Doctrine QueryBuilder HAVING expression

好的,所以我正在使用 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 中添加 having 子句,但我不能使用 SUM() 函数。有什么想法吗?

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

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

查询生成器的 sum() 函数实际上接受两个参数和 returns 一个数学表达式,这不是您想要的。

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

在您的案例中要记住的另一件事是,根据 documentation,每个 having() 调用都会覆盖所有先前设置的 having 条件。 所以如果你想使用其中的多个,请使用 andHavingorHaving.

我希望这能解释清楚。