2012-02-04 10 views
6

Jeśli używam zapytań bez QueryBuilder z tym DQLDoctrine2 Multiple Dołącz prace z createQuery ale nie z 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 
      "); 

wszystko jest w porządku, ale jeśli mogę użyć (co wierzę jest taka sama) koryta zapytania kreator zapytań jak ten

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

pojawia się następujący błąd:

„semantyczne error] linii 0 kol 66 w pobliżu” .colours c, LikeYeah \ GoBundle \ Entit y \ Produkt ": Błąd: zmienna identyfikacyjna g użyta w wyrażeniu ścieżki łączenia, ale nie została wcześniej zdefiniowana."

Czego mi brakuje?

+1

nie widzę 'dołączyć' w dokumentacji, nie ma 'leftJoin' i 'innerJoin' tylko. Być może problem polega na tym, że twoje 'join' jest w rzeczywistości leftJoin i dla niektórych wierszy nie definiuje 'g', ponieważ nie ma co dołączać .... –

+1

Wojciech, to nie to, QueryBuilder ma metodę o nazwie ' 'join()' ', który jest w zasadzie aliasem' 'innerJoin()' '. – Quentin

Odpowiedz

-1

może spróbować

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

pokazać procesowi init $ qb i wynik DQL

0

Możesz pomóc z tej metody

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

to działa na mnie.

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

Myślę, że powinieneś utworzyć nowy obiekt QueryBuilder.

Można użyć kodu wykonać, aby zobaczyć DQL tego QueryBuilder

$ qb-> getDQL();

2

Spróbuj tego: using addSelect Po dołącza:

$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'); 
Powiązane problemy