在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中,我希望此查询仅返回不同的“对象”。
我在查询构建器中尝试了很多选项,但我无法在“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”的情况下使用Query Builder执行此操作?
答案 0 :(得分:0)
由于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