2012-02-04 32 views
6

如果我使用的查詢,而不QueryBuilder的這個DQLDoctrine2多重聯用的createQuery作品,但不與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 
      "); 

一切都很好,但如果我用(我相信的是一樣的)查詢低谷查詢生成器這樣

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

我得到以下錯誤:

「語義錯誤] 0行,列66「附近.colours C,LikeYeah \ GoBundle \ Entit y \ Product':錯誤:標識變量g在連接路徑表達式中使用,但之前未定義。「

我錯過了什麼?

+1

我看不到文檔「加入」,有「leftJoin」,只有「innerJoin」。也許問題是你的'join'實際上是一個leftJoin,對於某些行它沒有定義'g',因爲沒有什麼可以加入.... – 2012-02-04 20:36:36

+1

Wojciech,那不是,QueryBuilder有一個名爲' 'join()''基本上就是''innerJoin()''的別名。 – Quentin 2012-02-05 22:35:35

回答

-1

可能會嘗試

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

顯示您$ QB init和DQL結果

0

您可以從這種方法

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

它爲我提供幫助。

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

我想你應該創建一個新的QueryBuilder對象。

您可以使用如下代碼來看到的QueryBuilder

$ QB-> getDQL()的DQL;後您的加入使用addSelect:

2

試試這個

$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'); 
相關問題