Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Personalizar la query para el campo entity de un formulario

21 de julio de 2015

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

#1

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
#2

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