Estoy tratando de usar el Generador de Consultas en Symfony2 para obtener algunos registros de una base de datos. Corro a la normal de la consulta en SQL y devuelve los resultados correctos. La consulta es

SELECT pg.name, pg.description
FROM pm_patentgroups pg
LEFT JOIN pm_portfolios pp ON pp.id = pg.portfolio_id

Quiero usar la consulta exacta utilizando Doctorine generador de consultas en Symfony2. Lo que he probado hasta ahora es

 $repository = $this->getDoctrine()
        ->getRepository('MunichInnovationGroupBundle:PmPatentgroups');
        $query = $repository->createQueryBuilder('pg')
        ->from('pm_patentgroups', 'pg')
        ->leftJoin('pg','pm_portfolios','pp','pp.id = pg.portfolio_id')
        ->getQuery();
        $portfolio_groups = $query->getResult();

pero su me da el siguiente error:

Aviso: Falta el argumento 1 para Doctrine\ORM\EntityRepository::createQueryBuilder()

Soy nuevo en Symfony2 y Doctorine. Puede usted por favor decirme lo que está mal aquí?

Gracias

2 Comentarios

  1. 4

    Le falta el alias cuando se utiliza createQueryBuilder. Ya que tienes el repositorio se pueden soltar de la porción y sólo tiene que utilizar

    $query = $repository->createQueryBuilder('pg')
    • puede usted por favor, eche un vistazo a mi código editado
    • Su me da error de sintaxis, pero no muestra ninguna línea específica donde se produce el error
  2. 2

    Algo como:

    $qb = $this->getDoctrine()->createQueryBuilder();
    
    $qb->addSelect('pm_patentgroups');
    $qb->addSelect('pm_portfolios');
    
    $qb->from('MunichInnovationGroupBundle:PmPatentgroups','pm_patentgroups');
    $qb->leftJoin('pm_patentgroups.pm_portfolios','pm_portfolios');

    Esto supone tener dos entidades debidamente relacionados.

    Un montón de ejemplos en el D2 manual. Sólo ten en cuenta que el generador de consultas trabaja con objetos, no sql.

    Y por el camino, el mensaje de error proviene del hecho de que la entidad repositorio (en oposición a la gerente de la entidad) requiere un alias.

    • Tengo que incluir la cláusula where para las columnas específicas en las que quiero que se unen para trabajar?
    • Nope. Una vez que se tienen las relaciones que establecen en sus entidades el generador de consultas es lo suficientemente inteligente como para averiguar la combinación de detalles. Una de las cosas buenas acerca de qb.Si usted todavía tiene problemas para conseguir la consulta anterior para el trabajo, a continuación, publicar las partes pertinentes de las entidades.
    • es que ahora me da un error de undefinded método… Llamada a método no Symfony\Bundle\DoctrineBundle\Registry::createQueryBuilder()
    • Debe ser $this->getDoctrine->getEntityManager()->createQueryBuilder();
    • Puede guardar este conjunto de resultados que puedo obtener de la consulta en un array ?
    • Seguro si quieres. El manual es tu amigo.
    • Si me da el nombre y la descripción en esta consulta cómo la voy a utilizar en mi punto de vista ?
    • Creo que voy a proa de éste antes de que mi sarcasmo obtiene lo mejor de mí.

Dejar respuesta

Please enter your comment!
Please enter your name here