Doctrine:2 leftJoin在同一张桌子上,但是不同的Join :: WITH

时间:2017-06-08 08:26:58

标签: doctrine-orm

我在同一张桌子上收到了2个leftJoin的请求,其中包含不同的别名:

$qb2->leftJoin('d2.groupeDossiers', 'gd',Join::WITH, 'gd.type = \'assure\'');
$qb2->leftJoin('d2.groupeDossiers', 'gdt',Join::WITH, 'gdt.type = \'tiers\'');

但似乎存在冲突。我怎么能在一次请求中离开加入? 谢谢!

1 个答案:

答案 0 :(得分:0)

不使用Doctrine Relationships

如果您的关系是这样的:

/**
 * @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()来获取所需的数据。