Hola:
Tengo un array con objetos, que contienen un listado de habilidades y también tengo un formulario así:
// Aquí tenemos el array $habilidades = $options['data']->getPersonaje()->getHabilidad()->getValues(); $builder ->add('habilidad','entity', ['class' => 'Destiny\AppBundle\Entity\AccionesHabilidades', 'query_builder' => function(EntityRepository $er) use ($habilidades) { $qb = $er->createQueryBuilder('h'); return $qb->where($qb->expr()->notIn('h.slug', $habilidades)) ->orderBy('h.id'); }])
Lo que quiero es que me devuelva un listado de los que NO coincidan. Ahora mismo me devuelve todos las entradas de la entidad.
Respuestas
Buenas, las expresiones in
y notIn
deben recibir un arreglo de valores literales (strings, numeros, booleanos), y según entiendo le está llegando un arreglo de objetos.
Deberás convertir tu arreglo de objetos en un arreglo de valores simples, algo como:
$habilidades = array(); foreach($options['data']->getPersonaje()->getHabilidad()->getValues() as $habilidad){ $habilidades[] = $habilidad->getId(); } ...
Y luego ya pasas tu arreglo al queryBuiler.
Espero te sirva, Saludos!
@manuel_j555
21 julio 2015, 21:51
Mira tu. Que evidente. Cuando no se tiene el día para programar, no puedes ni con un hola mundo.
No se que haría sin ti xD
@TsubasaAkai
21 julio 2015, 21:53