2012-02-04 12 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 
      "); 

सब कुछ ठीक है के साथ लेकिन अगर मैं का उपयोग क्वेरी गर्त (क्या मैं belive एक ही है)

"semantical त्रुटि] लाइन 0, col 66 के पास '.colours ग, LikeYeah \ GoBundle \ entit: इस

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

मैं निम्नलिखित त्रुटि मिलती है जैसी क्वेरी बिल्डर वाई \ उत्पाद ': त्रुटि: पहचान परिवर्तनीय जी पथ अभिव्यक्ति में शामिल होने के लिए प्रयोग किया जाता है लेकिन पहले परिभाषित नहीं किया गया था। "

मुझे क्या याद आ रही है?

+1

मैं दस्तावेज में 'में शामिल होने' नहीं देख सकते हैं, वहाँ 'leftJoin' और केवल 'innerJoin' है। शायद समस्या यह है कि आपका 'जॉइन' वास्तव में बाएं जॉइन है और कुछ पंक्तियों के लिए यह 'जी' को परिभाषित नहीं करता है क्योंकि इसमें शामिल होने के लिए कुछ भी नहीं है .... –

+1

वोज्शिएच, ऐसा नहीं है, QueryBuilder के पास एक विधि है जिसका नाम ' 'शामिल हों()' '' मूल रूप से '' innerJoin() '' का उपनाम है। – Quentin

उत्तर

-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');