2015-07-16 3 views
0

В проекте Symfony я пытаюсь сделать запрос с вычисленным полем. Упростить много мой SQL будет что-то вроде этого:Symfony Doctrine: использование подзапроса с предложением «HAVING» без использования EXISTS

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.

Я tryng, чтобы избежать использования неэффективных СУЩЕСТВУЕТ пункт:

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) 

Есть ли способ сделать это с помощью Query Builder без использования «EXISTS»?

ответ

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 
+0

К сожалению HIDDEN не будет работать при использовании внутри подзапроса IN. См. Мой пример: gist.github.com/webdevilopers/aa6a0ea06d7b5d4f0b04 – webDEVILopers