Foros del Web » Programando para Internet » PHP » Symfony »

Filtros marca/modelo symfony2

Estas en el tema de Filtros marca/modelo symfony2 en el foro de Symfony en Foros del Web. Buenas, tengo una cosa en mi proyecto que no se muy bien como solucionar, es la siguiente: Tengo dos entidades (marcas y modelos) en los ...
  #1 (permalink)  
Antiguo 31/07/2014, 15:45
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Filtros marca/modelo symfony2

Buenas, tengo una cosa en mi proyecto que no se muy bien como solucionar, es la siguiente:
Tengo dos entidades (marcas y modelos) en los que tengo una vista que muestra todos los modelos, bien, ahora quiero meter en esta vista un formulario que contenga un select con todas las marcas para buscar los modelos de esa marca. El problema es que nosé como enfocarlo, pensé en crear un FormType para la búsqueda llamarlo en el controlador, pasárselo a la vista y que cuando se busque vaya a otra ruta donde hace el query que tengo en mi repositorio. Pero pensé que es estúpido hacer mas consultas a la base de datos cuando ya tengo todos los modelos, filtrarlos. La cosa que nosé muy bien como hacerlo, ¿alguien puede iluminarme?
  #2 (permalink)  
Antiguo 31/07/2014, 16:26
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

Eso lo puedes hacer con el campo de tipo Entity: http://symfony.com/doc/current/refer...es/entity.html
Hya dos formas una que agrupes por marca y modelo en el tipo entity del formulario, pero si la lista es muy grande tendrías que implementar una búsqueda sobre el select con jquery.
La otra opción es que hagas selects dependientes. hay un ejemplo en el manual: http://symfony.com/doc/current/cookb...submitted-data
requiere que uses eventos y ajax con jquery pero viene bien explicado hasta con el script de jquery.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 01/08/2014, 11:24
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Filtros marca/modelo symfony2

Creo que no me he expiclado, lo que quiero es crear filtros de busqueda para mi backend para filtrar resultados de consultas previamente realizadas. He estado leyendo sobre LexikFormFilter y he intentado implementarlo con ellos pero no me funciona correctamente, ya que ponga lo que ponga en el select del form me muestra todos los registros. Segui la documentación oficialhttps://github.com/lexik/LexikFormFilterBundle/blob/master/Resources/doc/index.md luego cuando llegue a casa subo exactamente como lo hice pero vamos que segui el ejemplo que hay tal cual solo que utilizo campos filter_entity y no se si para esto se requiere algo mas.

Bueno lo dicho espero haberme explicado mejor. Saludos
  #4 (permalink)  
Antiguo 01/08/2014, 11:53
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

LexikFormFilterBundle se basa en los campos que tu le indiques en el form para crea un Query hacia una entidad por ejemplo Modelo. pero no te hace un filtro del filter_entity eso lo tienes que hacer tu con un querybuilder en ese campo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 04/08/2014, 08:52
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Pregunta Respuesta: Filtros marca/modelo symfony2

He conseguido que me funcione, pero tengo el siguiente problema.

Como dije anteriormente son dos entidades (Marca <1:N> Modelo) y quiero introducir un filtro para buscar por marca en los modelos, bien todo me funciona correctamente, excepto lo siguiente:

Los modelos tienen los atributos id, mark, price, image, cuando hago una consulta normal a través del repositorio como por ejemplo
Código PHP:
    $model $this->getDoctrine()->getManager()
            ->
getRepository('GoldenPhoneBackEndBundle:Model')
            ->
findAll(); 
Me devuelve un array de objetos con todos sus atributos, es decir, cada objeto tendrá id, model, mark (que es otro objeto), price e image.

Por lo tanto desde la vista (twig) puedo acceder a "mark" de un "model" tal que así {{ model.mark.mark }} y muestro el campo mark del objeto mark de ese modelo en concreto (el atributo mark contiene el nombre de la marca).

Pero claro, cuando realizo la búsqueda a través de los filtros twig me dice que "mark" no es un propiedad que contenga el objeto model ya que solo tiene "id, model, price, image"

¿Por qué es esto? ¿Cómo puedo arreglarlo? Aquí esta el código referente a como aplico los filtros con LexikFormFilterBundle
http://paste.ofcode.org/3asrs7mWUbbq9YcWLqFfguq

un saludo y gracias (espero haberme explicado)
  #6 (permalink)  
Antiguo 04/08/2014, 10:22
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

Publica las dos entidades relacionadas para ver como implementaste la relación uno a muchos
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 04/08/2014, 11:47
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Filtros marca/modelo symfony2

Muchas gracias por tu atención de verdad, no sabes lo que me esta costando jaja. Soy relativamente nuevo en symfony2 así que se duro conmigo con el fin de que aprenda :) que es lo más me importa.

Aquí tienes las entidades:
Marca --> http://codepad.org/Spz8Hcbm
Modelo --> http://codepad.org/4qTmVr5x

No se si será problema de ellas, pero vamos que cuando hago las consultas normales me relaciona todo sin problemas, así que supongo que las relaciones están correctamente.

Un saludo y gracias de nuevo por tu tiempo!
  #8 (permalink)  
Antiguo 04/08/2014, 12:55
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

La coleccion que te devuelve el findAll lo estas iterando con un for en la vista ??
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 04/08/2014, 13:21
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Filtros marca/modelo symfony2

Efectivamente utilizo un for para mstrar todos en la vista y parece funcionar correctamente.
  #10 (permalink)  
Antiguo 05/08/2014, 08:13
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

Código PHP:
Ver original
  1. $filterBuilder = $this->get('doctrine.orm.entity_manager')->getRepository('GoldenPhoneBackEndBundle:Model')->createQueryBuilder('e');
  2. //...
  3. $resultQuery = $filterBuilder->getQuery();
  4. $model = $resultQuery->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

Tu consulta solo trae los modelos. necesitas especificar en el query builder mediatnte un join que también traiga las relaciones hacia mark ya que en la linea 3 el resultado en la linea 4 es un arreglo que no contiene las relaciones.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #11 (permalink)  
Antiguo 05/08/2014, 09:02
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Filtros marca/modelo symfony2

Hmm pero para ello necesito acceder al valor seleccionado en el form ¿no? Lo intente con get('mark')->getData() pero nada.. Estoy algo perdido y confuso.. Porque aqui si necesito hacer un join y cuando saco los datos por findAll no?
  #12 (permalink)  
Antiguo 05/08/2014, 09:36
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Filtros marca/modelo symfony2

Cuando tu haces un findAll primero hace un select para traer todos los modelos y si solicitas de forma especifica el método getMark usa lazy loading para cargar las relaciones que eso se traduce en otro select de echo se recomienda que las consultas se hagan con el Repository madiante DQL o el QueryBuilder y no con los métodos convenientes como find, findAll etc.
Por otra parte en el ejemplo que expones estas usando un Query Builder y no un método. El resultado no necesariamente va ser un objeto tambien puede ser un arreglo lee la documentación de Doctrine: http://docs.doctrine-project.org/en/...-mixed-results
Necesitas revisar cual es tu caso y actuar acorde al resultado.
Revisa la estructura del arreglo para que veas que te esta enviando:
Código PHP:
Ver original
  1. $model = $resultQuery->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: filtros, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:35.