Doctrine: Generar filtros IN

sábado, 22 de diciembre de 2012 Etiquetas: , ,

Introducción


En esta entrada va a ser breve, simplemente vamos a ver como añadir un filtro con el operador IN con el motor de base de datos Doctrine. No es complicado, siempre que sepas como realizarlo.

Vamos a ver primero un ejemplo en SQL para ver como funciona la condición IN, el siguiente ejemplo obtiene los usuarios que tienen configurado como lenguaje español o inglés.

SELECT u.id,u.name
FROM USERS u
WHERE u.language IN ('es','en')

Solución

La forma de hacerlo como he comentado es sencilla, cuando se enlaza el valor de las variables a la consulta, los diferentes valores se tienen que pasar como un array, no como una cadena como podríamos pensar en un principio. La forma de realizarlo sería de la siguiente forma:

class UserRepository extends EntityRepository{
 /**
  * @param $languages String  Separado por comas Ej: es,en
  */
  public function findUsersLanguage( $languages ){
    $arrLan = explode(',', $languages);
    $this->getEntityManager()
         ->createQuery('SELECT u.id, name
              FROM GPAcmeUserBundle:User u 
              WHERE u.language in ( :lan )) 
         ->setParameter('lan',$arrLan)
         ->getResult();
  }
}

0 comentarios:

Publicar un comentario