在Symfony 2.7中,是否可以使用Doctrine queryBuilder
返回所有foo
实体的arrayCollection,这些实体已加入另一个未直接关联的实体(它们共享中间关系) ,没有加载该中间实体?例如:
$foo = {
'bar' => {
'baz' => { .. baz entity .. }
},
'barId'
}
$baz = {
'barId'
}
我想访问baz
实体,但我不想加载整个bar
实体(因为bar
上的postLoad侦听器会不必要地触发,我不需要那个数据或额外的数据库调用)。基本上bar
实体只需要是一个空 参考 ,它包含与我真正想要的baz
实体的关联。
当然可以在没有baz
实体的情况下加入bar
实体,但queryBuilder结果将不是foo
实体,它变成无用的数组。我想要的是具有常规结构的实体。
因此,这个简单的查询可以正确地连接所有内容:
$queryBuilder = $this->createQueryBuilder('foo')
->leftJoin('AcmeUberBundle:Baz', 'baz', 'WITH', 'baz.barId=foo.barId')
->addSelect('baz');
$foo = $queryBuilder->getQuery()->getResult();
问题: 这正确地连接了所有内容,但结果是一个基本数组,如:
array(
[0] => foo
[1] => baz
[2] => baz
[3] => foo
[4] => baz
[5] => foo
[6] => baz
[7] => baz
[8] => baz
)
连续返回与baz
共享barId
的{{1}}的每个foo
。我想我可以解析它,但它不太理想。我想要foo
个实体。
理想解决方案:
我想要的是告诉queryBuilder select
一个 REFERENCE 来bar并加入baz吧(类似于你如何创建一个教义参考)在PHP中,以便您拥有一个刚刚由ID填充的实体)。所以返回的最终foo
数组集合有$ foo-> bar-> baz和bar
就像一个空房间,你只需走过去baz
(因为你不想要bar
)中的任何数据。