2016-08-08 45 views
3

是什么
的查询MySQL搭配的Symfony

之间差在申请2分之1:

$qb = $this->createQueryBuilder('tu'); 

       $transUnits = $qb->select('tu, te') 
        ->leftJoin('tu.translations', 'te') 
        ->andWhere($qb->expr()->in('tu.id', $ids)) 
        ->andWhere($qb->expr()->in('te.locale', $locales)) 
        ->orderBy(sprintf('tu.%s', $sortColumn), $order) 
        ->getQuery() 
        ->getArrayResult(); 

and 

$qb = $this->createQueryBuilder('tu'); 

       $transUnits = $qb->select('tu, te') 
        ->leftJoin('AppBundle:Translation', 'te') 
        ->andWhere($qb->expr()->in('tu.id', $ids)) 
        ->andWhere($qb->expr()->in('te.locale', $locales)) 
        ->orderBy(sprintf('tu.%s', $sortColumn), $order) 
        ->getQuery() 
        ->getArrayResult(); 

的函数称为具有完全相同的参数。

在我与替换“tu.translations”的第二壳体“的appbundle:翻译”,因为不认识“翻译”,其中翻译是定义:

<one-to-many field="translations" target-entity="TranslationBundle\Entity\Translation" mapped-by="transUnit"> 
      <cascade> 
       <cascade-all/> 
      </cascade> 
</one-to-many> 

在第一种情况的结果是:阵列(13 ){...},这是正确的格式结果;在第二种情况下错误格式结果是:阵列(70){...}

+2

在每个查询上调用' - > getDQL'(在' - > getQuery()'之后),你会看到。 – Alsatian

+0

我添加注释。 –

回答

0

我加入实体类,:

/** 
    * @var \Translation 
    * @ORM\OneToMany(targetEntity="Translation", mappedBy="transUnit") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id", referencedColumnName="trans_unit_id") 
    * }) 
    */ 
    protected $translations; 

/** 
    * @var \TransUnit 
    * 
    * @ORM\ManyToOne(targetEntity="TransUnit", inversedBy="translations") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="trans_unit_id", referencedColumnName="id") 
    * }) 
    */ 
    protected $transUnit; 

和工作。 :)