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

Crear formulario con un select que contenga el nombre de los campos de la tabla

19 de noviembre de 2015

Buenas noches.

Quiero crear un formulario con un select para que el usuario pueda ordenar los resultados obtenidos por el campo de la tabla que seleccione, una vez esto funcione quiero añadirle al formulario un campo text para realizar una búsqueda de tipo:

"nombre" contiene "pepe" y me muestre solo a los contactos con el nombre pepe

Tiene que cargar el nombre de los campos de la tabla para luego realizar una consulta basándose en el campo elegido, la única forma que he encontrado ha sido escribir a mano los campos de la tabla en el formulario, ¿es posible cargarlos de forma automática?

class ContactListType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('contact', 'choice', array(
        'choices'            => array(
          'name'             => 'contact.name',
          'lastname'         => 'contact.last_name',
          'email'            => 'contact.email',
          'company'          => 'contact.company',
        ),
        'label'              => false,
        'translation_domain' => 'messages',
        'placeholder'        => 'contact.order_by',
      ));
  }
 
  public function getName()
  {
    return 'app_ContactList';
  }
}

Gracias.


Respuestas

#1

Para eso tienes que usar el schema manager de Doctrine. En un controlador se obtiene así el nombre de las columnas de una tabla:

$columns = $this->getDoctrine()->getManager()->getConnection()
    ->getSchemaManager()
    ->listTableColumns('Post');  // <-- pon aquí el nombre de tu tabla
 
$names = array();
foreach ($columns as $column) {
    $names[] = $column->getName();
}

Lo que podrías hacer es obtener esta información dentro de la entidad con el siguiente código:

$columns = $this->_em->getConnection()
    ->getSchemaManager()
    ->listTableColumns('Post');  // <-- pon aquí el nombre de tu tabla
 
$names = array();
foreach ($columns as $column) {
    $names[] = $column->getName();
}

De cualquiera de estas formas vas a poder pasar este array al formulario mediante las opciones de configuración de los formularios.

@javiereguiluz

19 noviembre 2015, 8:32
#2

Gracias por responder.

He aplicado lo que me has dicho pero me he encontrado con varios problemas, tengo los campos de la base de datos en inglés, me muestra todos los campos de la tabla y no quiero que me los muestre todos, la consulta diciéndole que filtre por el campo seleccionado y que contenga lo que se ha escrito en el otro campo ... He estado investigando pero no le veo color.

Aunque no sea la manera correcta creo que voy a dejar todo como estaba, gracias por ayudarme.

@nonio_87

22 noviembre 2015, 19:08