Symfony 2.7 QueryBuilder - 将不需要的实体关联作为附加它的关联的空引用加入

时间:2015-10-29 22:04:03

标签: symfony doctrine-orm

在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)中的任何数据。

0 个答案:

没有答案