2012-02-04 3 views
6

Si estoy usando consultas sin QueryBuilder con este DQLDoctrine2 múltiple Ingreso obras con CreateQuery pero no con QueryBuilder

$query = $this->_em 
    ->createQuery("SELECT p, g, c 
      FROM LikeYeah\GoBundle\Entity\Product p 
      JOIN p.garments g 
      LEFT JOIN g.colours c 
      ORDER BY p.id DESC 
      "); 

todo está bien, pero si uso el (lo que me creer es lo mismo) a través de consultas constructor de consulta como esta

$qb->select('p, g, c') 
    ->from('LikeYeah\GoBundle\Entity\Product', 'p') 
    ->join('p.garments', 'g') 
    ->leftJoin('g.colours', 'c') 
    ->orderBy('p.id', 'desc'); 

me sale el siguiente error:

"error semántico] línea 0, col 66' .colours cerca de c, LikeYeah \ GoBundle \ Entit y \ Product ': Error: Variable de identificación g utilizada en la expresión de ruta de unión, pero no se definió antes. "

¿Qué me falta?

+1

No puedo ver 'unirse' en la documentación, hay 'leftJoin' y 'innerJoin' solamente. Tal vez el problema es que tu 'join' es en realidad un leftJoin y para algunas filas no define 'g' porque no hay nada para unir ... –

+1

Wojciech, eso no es todo, el QueryBuilder tiene un método llamado ' 'join()' 'eso es básicamente un alias de' 'innerJoin()' '. – Quentin

Respuesta

-1

puede haber tratar

$qb->select('p, g, c') 
    ->from('GoBundle:Product', 'p') 
    ->join('p.garments', 'g') 
    ->leftJoin('g.colours', 'c') 
    ->orderBy('p.id', 'desc'); 

mostrar su init $ QB y el resultado DQL

0

Puede ayudar a partir de este método

public function findSampleClothingTypeGender($gender) { 
     $query = $this->getEntityManager() 
         ->createQuery(' 
      SELECT p FROM Acme:Product p 
      JOIN p.clothing_type ct 
      WHERE p.gender = :gender' 
         )->setParameter('gender', $gender); 

     try { 
      return $query->getResult(); 
     } catch (\Doctrine\ORM\NoResultException $e) { 
      return null; 
     } 
    } 
-1

Funciona para mí.

$this->_em->createQueryBuilder() 
     ->select('fu,e,t') 
     ->from('\xxxx\AdminBundle\Entity\FrontUser','fu') 
     ->join('fu.read_essays','e') 
     ->leftJoin('e.tags','t') 
     ->getQuery()->execute(); 

Creo que deberías crear un nuevo objeto QueryBuilder.

Puede utilizar el código de seguimiento para ver DQL de ese QueryBuilder

$ qb-> getDQL();

2

Prueba esto: utilizando addSelect después de su Combinaciones:

$qb->select('p') 
    ->join('p.garments', 'g') 
    ->addSelect('g') 
    ->from('LikeYeah\GoBundle\Entity\Product', 'p') 
    ->join('p.garments', 'g') 
    ->leftJoin('g.colours', 'c') 
    ->addSelect('c') 
    ->orderBy('p.id', 'desc'); 
Cuestiones relacionadas