2012-03-22 15 views
6

Me gustaría realizar una SELECCIÓN a partir de los resultados de una subconsulta en DQL. El equivalente de hacer lo siguiente en SQL:Seleccionar de la subconsulta en DQL

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

El problema que estoy en es que se queja de que

Error: Class '(' is not defined 

El DQL real que produce que el error es:

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 

Entonces, para reiterar, ¿cómo puedo realizar una selección desde una sub consulta?

Respuesta

5

Usando DQL estoy bastante seguro de que no es posible, pero si realmente se necesita es posible que desee comprobar:

Doctrine Native SQL. (examples, enlace permanente desde la misma página)

Es mucho más complejo pero también le da la libertad de enviar consultas nativas y ejecutarlas (la parte más complicada para mí fue la hidratación de objetos).

Por otro lado, si el segmento de código última se parece a nada de lo que estamos tratando de lograr, no hay una manera más sencilla que no requiere sub-consultas:

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 

Espero que esto ayude ...

+0

mi consulta final tenía que ser un poco más complicada que eso, aunque no sabía que podía usar TENER así, ¡gracias por ese consejo! Al final fui con el SQL nativo y la hidratación de objetos. ¡Gracias! – drewag

+3

@drewag, y su resultado final con consulta nativa será muy interesante si se comparte aquí. (Sé que han pasado casi 4 años pero ...) gracias –

+2

¿Ha logrado resolver su problema con la hidratación del objeto de una manera limpia? –