2012-03-22 4 views
6

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

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 

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

ответ

5

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

Doctrine Native SQL. (examples, Постоянная ссылка на эту страницу)

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

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

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 

Надеется, что это помогает ...

+0

Мой последний запрос должен быть немного сложнее, хотя я и не знал, что вы можете использовать HAVING так, спасибо за этот совет! В итоге я пошел с Native SQL и гидрацией объектов. Благодаря! – drewag

+3

@drewag, и ваш окончательный результат с собственным запросом будет очень интересным, если вы поделитесь здесь. (Я знаю, что прошло почти четыре года, но ...) спасибо –

+2

Удалось ли вам решить проблему с гидратацией объекта чистым способом? –

Смежные вопросы