symfony 2.3.2 como utilizar una consulta de un entityRepository en el query_builder de un form

246 views
Skip to first unread message

Martin Boggiano

unread,
Jul 20, 2013, 5:31:06 PM7/20/13
to symfo...@googlegroups.com
Hola listeros!
  Quiero utilizar una consulta que ya tengo armada en el EntityRepository dentro del campo query_builder del form

En mi entity repository tengo lo siguiente:

class PropietariosRepository extends EntityRepository
{
  public function propietariosAH()
  {
    $em = $this->getEntityManager();
   
    $dql = "SELECT p.nombre
        FROM HBInmobiliariaBundle:Inmuebles i , HBInmobiliariaBundle:Propietarios p, HBInmobiliariaBundle:Alquileres a
        WHERE p.id=i.propietarioId and i.id=a.inmuebleId and a.habilitado=1
        ORDER BY p.nombre ";
   
    $query = $em->createQuery($dql);
   
    $rs = $query->getResult();
   }
}

y en el form
        ->add('propietariosAH', 'entity', array(
          'class' => 'HectorBuggiano\Inmobiliaria\InmobiliariaBundle\Entity\Propietarios',
           'property' => 'nombre',
          'label' => 'Propietarios Habilitados',
          'required' => false,
          'mapped' => false,
          'empty_value' => 'Seleccione un propietario',
          'query_builder' => function(EntityRepository $em) {
        return $em->propietariosAH();
          },
        ))

y symfony me sigue tirando el siguiente error:

Undefined method 'propietariosAH'. The method name must start with either findBy or findOneBy!


Probe cambiando el nombre para utlilizar findByPropietariosAH() pero luego me dice que no encuentra el campo propietariosAH

Tengo que armar el query builder sin poder utilizar la consulta que ya tengo creada?


Espero puedan tenderme una mano


Desde ya muchas gracias!


 

juan vexenat

unread,
Jul 20, 2013, 6:18:08 PM7/20/13
to symfo...@googlegroups.com
podes pasar la clase propietario?



 

--
--
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 correos electrónicos, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Jakala

unread,
Jul 20, 2013, 8:26:45 PM7/20/13
to symfo...@googlegroups.com
Buenas:

creo que el problema lo tienes en el parametro querybuilder. Estas utilizando EntityRepository, en lugar de la clase PropietariosRepository (que es la que tiene el metodo que has definido).

Prueba a poner:

    'query_builder' => function (PropietarioRepository $em) {
        return $em->propietariosAH();
    }

Martin Buggiano

unread,
Jul 21, 2013, 8:02:18 PM7/21/13
to symfo...@googlegroups.com
Hola!
  Eh probado tu sugerencia ademas de agregar en la entidad Propietarios lo siguiente:
 * @ORM\Entity(repositoryClass="HectorBuggiano\Inmobiliaria\InmobiliariaBundle\Entity\PropietariosRepository")   

El codigo en PropietariosType quedo asi:


        ->add('propietariosAH', 'entity', array(
          'class' => 'HectorBuggiano\Inmobiliaria\InmobiliariaBundle\Entity\Propietarios',
          'property' => 'nombre',
          'label' => 'Propietarios Habilitados',
          'required' => false,
          'mapped' => false,
          'empty_value' => 'Seleccione un propietario',
          'query_builder' => function(PropietariosRepository $em) {

        return $em->propietariosAH();
          },
        ))


Y el error que me devuelve symfony es el siguiente ahora:

Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given

Esta es la funcion con la que obtengo los resultados:


  public function propietariosAH()
  {
    $em = $this->getEntityManager();
   
    $dql = "SELECT p.nombre
        FROM HBInmobiliariaBundle:Inmuebles i , HBInmobiliariaBundle:Propietarios p, HBInmobiliariaBundle:Alquileres a
        WHERE p.id=i.propietarioId and i.id=a.inmuebleId and a.habilitado=1
        ORDER BY p.nombre ";
   
    $query = $em->createQuery($dql);
   
    $rs = $query->getResult();
   
    return $rs;
  }
 
Gracias por su ayuda


    }

--
--
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 a un tema del grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/mfw-jJAehMs/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
Martin D. Buggiano
Martillero y Corredor Público Nacional

Jakala

unread,
Jul 22, 2013, 2:15:20 AM7/22/13
to symfo...@googlegroups.com
Buenas de nuevo:

el error parece bastante claro :) estas devolviendo un array () en lugar de un queryBuilder que es lo que tienes que devolver...

Es posible que con devolver el $query en lugar del $rs se solucione. Pero quizas tengas que cambiar un poco la consulta y construirla con un createQueryBuilder()  (que es lo que te esta pidiendo que devuelvas)

Martin Buggiano

unread,
Jul 22, 2013, 10:00:09 AM7/22/13
to symfo...@googlegroups.com
Muchas gracias!
  Uno mira tantas veces el codigo que queda ciego y deja pasar esos detalles, intento devolver solo el query y sino lo hare con createQueryBuilder.


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 a un tema del grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/mfw-jJAehMs/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 
Reply all
Reply to author
Forward
0 new messages