Выбор из подзапроса в DQL

Я хотел бы выполнить SELECT из результатов подзапроса в DQL. Эквивалент выполнения следующего в SQL:

SELECT * FROM ( SELECT foo1,foo2 FROM bar ) where foo1='something';

Проблема, с которой я сталкиваюсь, заключается в том, что он жалуется, что

Error: Class '(' is not defined

Фактический DQL, который вызывает эту ошибку:

SELECT u FROM (
    SELECT u, COUNT(u) as total
        FROM Utterance u LEFT JOIN u.recordings r
        WHERE r.speaker IS NULL OR r.speaker <> 5
        GROUP BY u.id
    ) matched WHERE total < 5

Итак, повторюсь, как я могу выполнить выбор из подзапроса?


person drewag    schedule 22.03.2012    source источник


Ответы (1)


Используя DQL, я уверен, что это невозможно, но если вам это действительно нужно, вы можете проверить:

Собственный SQL Doctrine. (примеры, постоянная ссылка с той же страницы)

Это намного сложнее, но также дает вам свободу отправлять собственный запрос и выполнять его (сложной частью для меня была гидратация объекта).

С другой стороны, если последний сегмент кода напоминает что-то, чего вы пытаетесь достичь, есть более простой способ, не требующий подзапросов:

SELECT u
    FROM Utterance u LEFT JOIN u.recordings r
    WHERE r.speaker IS NULL OR r.speaker <> 5
    GROUP BY u.id HAVING COUNT(u) < 5

Надеюсь это поможет...

person Jovan Perovic    schedule 23.03.2012
comment
мой последний запрос должен был быть немного сложнее, чем этот, хотя я не знал, что вы можете использовать HAVING таким образом, поэтому спасибо за этот совет! В конце концов я выбрал собственный SQL и гидратацию объектов. Спасибо! - person drewag; 24.03.2012
comment
@drewag, и ваш окончательный результат с нативным запросом будет очень интересным, если вы поделитесь здесь. (Я знаю, что прошло почти 4 года, но...) спасибо - person Adib Aroui; 18.12.2015
comment
Удалось ли вам решить вашу проблему с гидратацией объекта чистым способом? - person Joe Yahchouchi; 12.04.2016