SQL / Doctrine:leftJoin中的getResult将对象和引用的对象作为数组中的2个条目返回

时间:2014-09-04 12:03:49

标签: symfony doctrine

我在Symfony2 / Doctrine-Environment中遇到以下问题:

类a与类b有关系,但是这种关系不是通过ORM注释或其他任何方式注册的,因为引用的表是可变的。所以我以下列方式加入:

$query = $this->createQueryBuilder('a')
        ->select('a')
        ->addSelect('b')
        ->leftJoin('My\Bundle\EntityBundle\Entity\OtherClass','b',\Doctrine\ORM\Query\Expr\Join::WITH,'a.referenceId=b.id')
        ->getQuery()->getResult($hydrationMode);

结果数组现在包含a和b的两个对象(有点像

array('a1', 'b1', 'a2', 'b2', .... )

)。我可以再次过滤它,但我觉得这不是要走的路。我尝试过不同的水合模式,但这并没有改变任何东西。

有没有办法归还它,所以保留了关联?

我的意思是,如下所示:

array(array('a1', 'b1'), array('a2', 'b2'), ...)

1 个答案:

答案 0 :(得分:9)

您可以使用标准的ScalarHydrator:

来实现这一目标
$query = $this->createQueryBuilder('a')
    ->select('a')
    ->addSelect('b')
    ->leftJoin('My\Bundle\EntityBundle\Entity\OtherClass','b','WITH','a.referenceId=b.id')
    ->getQuery()
    ->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR);