Amigos

Seleccionar entidades que contengan hijos

Publicado el 03/05/2013 a las 06:01 am

MySQL Full-Text

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:

  1. $qb->select(array('a.id', 'a.nombre',  'count(f) as total_photos'));
  2. $qb->from('models\Album', 'a');
  3. $qb->leftJoin('a.fotos', 'f');
  4. $qb->groupBy('a.id');
  5. $qb->having('total_photos > 0');

Usando las expresiones de la clase QueryBuilder

La segunda forma sería usando las funciones que el objeto QueryBuilder:

  1. $qb->select(array('a');
  2. $qb->from('models\Album', 'a');
  3. $qb->leftJoin('a.fotos', 'f');
  4. $qb->groupBy('a.id');
  5. $qb->having($qb->expr()->gt($qb->expr()->count('a.fotos'), 0)) //acá la magia