Ordenar select por orden alfabetico

153 views
Skip to first unread message

Alvaro Fieira

unread,
Oct 16, 2015, 3:57:11 AM10/16/15
to symfony-es
Mi problema es que trato de ordenar los selects del formulario que se extraen de otra entidad,que se muestran por orden de creación, e intento ordenarlo por orden alfabetico.He mirado por ejemplos en google para implementarlo pero no me funcionan.
He probado con usar @ORM\OrderBy({“parametro_a_ordenar” = “ASC”} en entidades pero no funciona y encontré otra solución de ordenarlo en formulario de esta manera:
->add('agente',array(
'class' => 'RumboApp:Agente',
'empty_value' => '--------------------',
'query_builder' => function($er) {
return $er->createQueryBuilder('u')
->select('u')
->orderBy('u.nombre','ASC');
}))
pero me muestra un error en el array

Expected argument of type "string or Symfony\Component\Form\FormTypeInterface", "array" given

500 Internal Server Error - UnexpectedTypeException


Para el que lo quiera ver pongo el enlace al proyecto y otro al formulario:

Proyecto=> Pulsa aqui

Formulario=> Pulsa aqui


PD: Se me olvidaba mencionar que estoy usando la version 2.7 estable de Symfony

Gracias por adelantado por la ayuda

Manuel Aguirre

unread,
Oct 16, 2015, 8:51:03 AM10/16/15
to symfo...@googlegroups.com
El arreglo de opciones del método ->add, debe ser en el tercer argumento del método, lo estás pasando en el segundo, por lo que te has olvidado colocar el segundo parametro que es el tipo de campo o null si quieres que symfony decida el tipo de campo por ti.

Saludos!

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

Manuel Aguirre.


manuel_j555 | Desarrollador de Software | Optime Consulting | twitter | github | Sitio web


A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos de leer manuales.

oyepez003

unread,
Oct 16, 2015, 9:38:16 AM10/16/15
to symfony-es
Hola.

Colocar la logica de una consulta directamente en el form no es una buena practica.

Lo mejor es que la opcion query_builder le coloques la funcion que llamara en el objeto repository de tu modelo.

Por ejemplo en tu caso crea el objeto AgenteRepository y crea un metodo asi:

public function _findAllOrderedByNombre()
{
    return $this->buildQuery()->orderBy('u.nombre', 'ASC');
}

El nombre del metodo y la solucion es solo un ejemplo puedes cambiarlo y mejorarlo claro esta.

Ahora en tu form colocas el nombre del metodo que creaste en la opcion query_builder:

->add('agente',array(
    ...
    'class' => 'RumboApp:Agente',
    'query_builder' => '_findAllOrderedByNombre',
    ...
)

Recuerda que para que funcione los repositorios debes colocar en el modelo (an tu caso la clase Agente) la opcion repositoryClass:

@ORM\Entity(repositoryClass="YourBundle\Path\To\Repository\YourRepository")

De lo contrario el formulario dara un error que no encuentra el metodo _findAllOrderedByNombre

Si alguien tiene otra idea de como hacerlo esperamos por aqui ;)

Saludos cordiales.

P.D. Por favor no crear dos preguntas sobre el mismo tema en el grupo... Saludos.

Alvaro Fieira

unread,
Oct 19, 2015, 6:09:34 AM10/19/15
to symfony-es
Ya esta resuelto.
este es como lo puse 
->add('agente','entity', array(
'class' => 'RumboAppBundle:Agente',
'query_builder' => function (AgenteRepository $er) {

return $er->createQueryBuilder('u')
            ->orderBy('u.nombre', 'ASC')
            ;}));
Reply all
Reply to author
Forward
0 new messages