Doctrine2: Subconsultas

En este artículo veremos un par de ejemplos de subconsultas en Doctrine2 mediante objetos QueryBuilder.

Para los ejemplos usaremos el siguiente modelo aprovechando lo que tenemos de otros artículos:

 Doctrine2: Subconsultas

Y estos datos:

User
Id username
1 pepe
2 juan
3 manuel
Address
Id user_id city_id street
1 1 1 Calamar 23
2 1 6 Perico 3
3 2 4 Castellana 45
4 3 7 Principal 94
Country
id name slug
1 España spain
2 Portugal portugal

Province
id country_id name slug
1 1 Valencia valencia
2 1 Madrid madrid
3 2 Algarve algarve
4 2 Minho minho
City
id province_id name slug
1 1 Valencia valencia
2 1 Sagunto sagunto
3 1 Gandía gandia
4 2 Madrid madrid
5 2 Móstoles mostoles
6 3 Lagos lagos
7 4 Fafe fafe


Usuarios que tienen alguna dirección en un país determinado

Usaremos exists para esta consulta:

Es muy sencilla, hay que tener en cuenta que los parámetros hay que añadirlos en la consulta principal y al método exists le pasamos el DQL.

Usuarios que todas sus direcciones están en un país determinado

En este caso hacemos lo mismo, pero con un not exists y negando la condición para obligar a que todas las direcciones sean del país:

Usuarios con más direcciones

Este último ejemplo es simplemente para mostrar otro uso con ALL, no está dentro de la demo porque SQLite no permite el uso de ALL en subconsultas.

Además de usando exists y all, también podemos usar subconsultas con some, any, in y notIn.

Ver Demo