gpt4 book ai didi

php - 将多个不同的实体分配给 Doctrine 中的一个数组行

转载 作者:搜寻专家 更新时间:2023-10-31 21:57:51 24 4
gpt4 key购买 nike

当我在 Doctrine 中执行类似这样的操作时:

$qb = $doctrine
->getRepository('EntityA')
->createQueryBuilder('a')
->addSelect('b')
->join('EntityB', 'b', 'WITH', 'a.b = b')
->getQuery()
->getResult()

我得到一个如下所示的数组:

array(0 => EntityA,
1 => EntityB,
2 => EntityA,
4 => EntityB)

事实上,我得到了 2 个结果行,但是一个大小为 4 的数组。这使得迭代它以在模板中显示几乎是不可能的。

我想要这样的结果:

array(0 => array(EntityA, EntityB),
1 => array(EntityA, EntityB))

当然,我可以在引用 EntityBEntityA 上创建一个映射。但即使有可能更改加载行为,LAZYEAGER 等,也可能希望能够即时创建此类关系。

例如:

在包含大量实体的概览中,需要EAGER 加载来防止过多的查询。但是当我只想显示一个 Entity 并且不需要额外的数据时,LAZY 加载是更可取的。

最佳答案

由于您已将 EntityB 映射为 EntityA.b,如下关系所示:

...join('EntityB', 'b', 'WITH', 'a.b = b')...

因此,您实际上不需要将 b 添加到选择中,因为您正在加载它 eagerly懒洋洋地

从查询构建器中删除 ->addSelect('b') 并通过 EntityA.b 映射使用 EntityB

示例:

$as = $doctrine
->getRepository('EntityA')
->createQueryBuilder('a')
->join('EntityB', 'b', 'WITH', 'a.b = b')
->getQuery()
->getResult();

foreach($as as $a){
echo "EntityA property".$a->id;
echo "EntityB property".$a->b->id;
}

此查询将返回 EntityAArrayCollection

注意:上面的示例假定 EntityA.b 是公共(public)属性。

更新:

经过一番挖掘,我发现了这篇较旧的帖子:Doctrine 2 QueryBuilder add multiple select elements /parameters? .根据它,您可以通过直接用逗号分隔实体而不是使用 ->addSelect() 方法来获得您想要的结果。

尝试以下 DQL:

$query = $em->createQuery("SELECT a, b FROM EntityA a JOIN a.b b")

上面的查询将动态地急切地获取 b

关于php - 将多个不同的实体分配给 Doctrine 中的一个数组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31673849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com