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