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

Har*_*man 5 doctrine symfony

我在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);
Run Code Online (Sandbox Code Playgroud)

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

array('a1', 'b1', 'a2', 'b2', .... )
Run Code Online (Sandbox Code Playgroud)

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

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

我的意思是这样的,如下所示:

array(array('a1', 'b1'), array('a2', 'b2'), ...)
Run Code Online (Sandbox Code Playgroud)

SBH*_*SBH 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);
Run Code Online (Sandbox Code Playgroud)