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