我在同一张桌子上收到了2个leftJoin的请求,其中包含不同的别名:
$qb2->leftJoin('d2.groupeDossiers', 'gd',Join::WITH, 'gd.type = \'assure\'');
$qb2->leftJoin('d2.groupeDossiers', 'gdt',Join::WITH, 'gdt.type = \'tiers\'');
但似乎存在冲突。我怎么能在一次请求中离开加入? 谢谢!
答案 0 :(得分:0)
如果您的关系是这样的:
/**
* @ORM\OneToMany(targetEntity="GroupeDossier", mappedBy="test")
*/
private $groupeDossiers;
和
/**
* @ORM\ManyToOne(targetEntity="Test", inversedBy="groupeDossier")
* @ORM\JoinColumn(name="id_test", referencedColumnName="id")
*/
private $test;
返回所需内容的最佳方式是:
$qb2->select('MyBundle:Test','t');
$qb2->addSelect('gd');
$qb2->addSelect('gdt');
$qb2->leftJoin('MyBundle:GroupeDossiers', 'gd',Join::WITH, 'gd.type = \'assure\' AND gd.test = t');
$qb2->leftJoin('MyBundle:GroupeDossiers', 'gdt',Join::WITH, 'gdt.type = \'tiers\' AND gdt.test = t');
但是,您应该使用getArrayResult()
获取gd
dans gdt
在您的实体中,执行以下操作:
/**
* @ORM\OneToMany(targetEntity="GroupeDossier", mappedBy="test")
*/
private $groupeDossiers;
public function getGroupesDossierSeparated() {
$result = ['assure'=>[], 'tiers'=>[]];
foreach ($this->groupeDossiers as $d) {
$result[$d->getType()][] = $d;
}
return $result;
}
然后,只需$qb->leftJoin('d2.groupeDossiers')
,您就可以使用getGroupesDossierSeparated()
来获取所需的数据。