Выбор из подзапроса в DQL - PullRequest
7 голосов
/ 23 марта 2012

Я хотел бы выполнить 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

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

1 Ответ

6 голосов
/ 23 марта 2012

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

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

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

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

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

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

...