Seleccionar entidades que contengan hijos
Publicado el 03/05/2013 a las 06:01 am

Acá mostraré dos formas de seleccionar entidadades o modelos que contengan al menos un hijo según la asociación hecha entre ambos modelos. Esta relación casi siempre viene establecida de uno a muchos. Para este ejemplo, usaremos la siguiente relación:
Un album (id | nombre) puede tener muchas fotos (id | imagen | album_id)
Usando la palabra reservada "count"
La primera forma sería usando la palabra "count" de una manera natural:
- $qb->select(array('a.id', 'a.nombre', 'count(f) as total_photos'));
- $qb->from('models\Album', 'a');
- $qb->leftJoin('a.fotos', 'f');
- $qb->groupBy('a.id');
- $qb->having('total_photos > 0');
Usando las expresiones de la clase QueryBuilder
La segunda forma sería usando las funciones que el objeto QueryBuilder:
- $qb->select(array('a');
- $qb->from('models\Album', 'a');
- $qb->leftJoin('a.fotos', 'f');
- $qb->groupBy('a.id');
- $qb->having($qb->expr()->gt($qb->expr()->count('a.fotos'), 0)) //acá la magia
Últimos comentarios