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

Ingresar una consulta dql como opciones de un ChoiceType en Synfomy2.8

18 de mayo de 2017

Saludos,Estoy creando un sistema de encuestas y tengo un problema cuando intento crear un formulario que admita varias respuestas para la misma pregunta, intento enviar los datos de una consulta como opciones para un formulario de tipo ChoiceType sin embargo no me permite crear el formulario por que dice que "$options" no es un array: (simplifiqué el código para hacerlo entendible)

$options= $em->createQuery('SELECT u.nombre FROM AppBundle:Opciones u')->getResult();

$form = $this->createFormBuilder($respuesta)                    
  ->add('Respuestas', ChoiceType::class,array(
                    'choices'=>$options,
                    'choice_value'=>'cDetAlt',      
                   'multiple'=>true,
                 ))
  ->add('grabar',SubmitType::class)
  ->getForm();

El tema es que necesito que se puedan escoger varias opciones , de otro modo usaría el EntityType usando la clase "AppBundle:Opciones" y mi campo 'Respuestas' es de tipo array. Si alguien me puede recomendar una mejor forma de hacerlo estaría muy agradecido.


Respuestas

#1

Como dice el error, la opción $options que pasas al form type tiene que ser un array ... y el resultado de Doctrine no es un array normal por defecto.

La solución sería decirle a Doctrine que te devuelva un array normal. Para ello, tienes que pasar un parámetro al método getResult():

$options = $em->createQuery('SELECT u.nombre FROM AppBundle:Opciones u')->getResult(Query::HYDRATE_ARRAY);

En este documento tienes más información sobre este tema.

@javiereguiluz

18 mayo 2017, 9:00
#2

Gracias por responder, ahora me da otro problema. Uso este código para no tener de valor un entero:

 
foreach($options as $opcion){
                        $opciones[]=array($opcion=>$opcion);
                    }

Sin embargo me genera opciones agrupadas:

@rolando18285963

18 mayo 2017, 14:52