Symfony Doctrine:在不使用 EXISTS 的情况下使用带有 "HAVING" 子句的子查询

Symfony Doctrine: Use of subquery with "HAVING" clause without using EXISTS

在 Symfony 项目中,我正在尝试使用计算字段进行查询。简化很多我的 SQL 会是这样的:

SELECT o.id, (p.price_a + p.price_b) as total_price
FROM objects o
INNER JOIN prices p
ON o.id = p.object_id
HAVING total_price > 10

我的计算字段比较复杂,使用的是变化的外部值,我无法预先计算它。

因为我只想要不同的 object.id 我已经将上面的代码添加为子查询:

SELECT DISTINCT o_id 
FROM (
  SELECT o.id as o_id, (p.price_a + p.price_b) as total_price
  FROM object o
  INNER JOIN price p
  ON o.id = p.object_id
  HAVING total_price > 10)

在 Symfony 中,我希望此查询 returns 只有不同的 "Object"。

我尝试了很多查询生成器选项,但我无法将子查询添加到 "FROM" 子句。

我尽量避免使用低效的 EXISTS 子句:

SELECT DISTINCT o.id 
FROM objects o
WHERE EXISTS (
  SELECT p.*, (p.price_a + p.price_b) as total_price
  FROM prices p
  WHERE o.id = p.object_id
  HAVING total_price > 10)

有没有什么方法可以在不使用 "EXISTS" 的情况下使用查询生成器执行此操作?

多亏了 HIDDEN 关键字,我已经解决了这个问题。使用 HIDDEN 您可以标记一个字段以避免 ORM 获取。完美去除计算字段。

使用 DQL:

SELECT o, (p.price_a + p.price_b) AS HIDDEN total_price
FROM TestObjectBundle:Object o
INNER JOIN TestObjectBuncle:Price p
GROUP BY o
HAVING total_price > 10