Doctrine2 Multiple Join适用于createQuery,但不适用于queryBuilder

时间:2012-02-04 19:47:52

标签: php symfony doctrine-orm dql

如果我在没有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 个答案:

答案 0 :(得分:3)

试试这个:在你加入后使用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');

答案 1 :(得分: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;
        }
    }

答案 2 :(得分:0)

尝试以下一项

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

答案 3 :(得分:-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结果

答案 4 :(得分:-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的Dql

$ QB-> getDQL();