Doctrine2 Multiple Join работает с createQuery, но не с queryBuilder - PullRequest
8 голосов
/ 04 февраля 2012

Если я использую запросы без queryBuilder с этим dql

$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 \ Entity \ Product ': Ошибка: Идентификационная переменная g используетсяв выражении пути соединения, но не был определен ранее. "

Что мне не хватает?

Ответы [ 5 ]

3 голосов
/ 06 февраля 2015

Попробуйте: используя addSelect после ваших соединений:

 $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');
0 голосов
/ 08 декабря 2018

Попробуйте ниже одного

 $qb->select('p','g','c')
      ->from(array('LikeYeah\GoBundle\Entity\Product','p'))
      ->join(array('p.garments','g'))   
      ->join(array('g.colours','c'),'LEFT')
      ->order_by('p.id','DESC'); 
0 голосов
/ 29 апреля 2013

Вы можете помочь этим методом

 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;
        }
    }
0 голосов
/ 13 июля 2013

Это работает для меня.

$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.

Вы можете использовать следующий код для просмотра Dql этого QueryBuilder

$ qb-> getDQL ();

0 голосов
/ 26 ноября 2012

можно попробовать

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

показать ваши $ qb init и результаты DQL

...