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