2012-02-04 26 views
6

Nếu tôi đang sử dụng truy vấn mà không queryBuilder với DQL nàyDoctrine2 Nhiều Tham gia làm việc với createQuery nhưng không phải với 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 
      "); 

mọi thứ đều tốt, nhưng nếu tôi sử dụng (những gì I belive là như nhau) máng truy vấn xây dựng truy vấn như thế này

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

tôi nhận được lỗi sau:

"lỗi ngữ nghĩa] dòng 0, col 66 gần' .colours c, LikeYeah \ GoBundle \ Entit y \ Product ': Lỗi: Biến số nhận dạng g được sử dụng trong biểu thức đường dẫn nối nhưng không được xác định trước đó. "

Tôi đang thiếu gì?

+1

Tôi không thể nhìn thấy 'tham gia' trong tài liệu hướng dẫn, có 'leftJoin' và 'innerJoin' mà thôi. Có lẽ vấn đề là 'tham gia' của bạn thực sự là một leftJoin và đối với một số hàng nó không xác định 'g' gây ra không có gì để tham gia .... –

+1

Wojciech, đó không phải là nó, QueryBuilder có một phương pháp có tên ' 'join()' 'về cơ bản là một bí danh của' 'innerJoin()' '. – Quentin

Trả lời

-1

có thể thử

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

hiển thị init $ qb của bạn và kết quả DQL

0

Bạn có thể giúp từ phương pháp này

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

Nó làm việc cho tôi.

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

Tôi nghĩ bạn nên tạo đối tượng QueryBuilder mới.

Bạn có thể sử dụng mã theo dõi để xem Dql của QueryBuilder

$ qb-> getDQL();

2

Hãy thử điều này: sử dụng addSelect sau khi tham gia của bạn:

$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'); 
Các vấn đề liên quan