从DQL选择强制生成混合结果


Force mixed result from DQL select

我有一个像这样的dql查询

"SELECT a, b FROM EntityA a JOIN a.variable b"

和我想学说给我一个结果列表,其中每个条目是一个数组(对象(EntityA),对象(EntityB))。所以我确定两个对象"a"answers"b"是相关的

实际上,当我运行这个查询时,我得到一个分隔对象"a"answers"b"的列表,就像(我使用{}符号来表示列表)

{object(EntityA), object(EntityB), object(EntityA), object(EntityB),…}

,我不想依赖于这样一个事实,即在奇数位置有EntityA对象,在偶数位置有EntityB对象。这绝对不可靠。我想检索一个像

这样的列表

{array(object(EntityA), object(EntityB)), array(object(EntityA), object(EntityB)),…}

现在,我知道如果我选择ONE Entity + n标量值,如

,我将获得混合结果
"SELECT a, b.id AS b_id FROM EntityA a JOIN a.variable b"

,结果是

{阵列(对象(EntityA),"b_id"=> },阵列(对象(EntityA),"b_id"=> }, ...}

但是有人知道如何强制选择多个实体的混合结果吗?

Note1:将结果合并为对象或数组不会改变

Note2:从Doctrine文档中,"从实体中获取多个"部分报告

如果您获取了FROM子句中列出的多个实体,则水合作用将返回迭代不同顶级实体的行。

所以,也许我应该尝试另一种方法,但我不知道

Note3:我尝试了这个技巧(多个实体+一个虚拟标量)

"SELECT a, b, 1 AS b_id FROM EntityA a JOIN a.variable b"

但不能正常工作

Note4:我不想从"a"访问"b"。为了简单起见,我将它们直接关联在一起,但在我的例子中它们是间接关联的。

谢谢

您要查找的是任意连接(Doctrine ORM 2.3支持):

SELECT
    a,
    b
FROM
    EntityA a
JOIN
    EntityB b
WITH
    b.aReference = a.id

我假设aReferenceManyToOneOneToOne标记的引用EntityA的字段。

该操作的结果将是一个具有以下伪结构的数组:

[
    [a1, b1],
    [a1, b2],
    [a1, b3],
    [a2, b1],
    [a2, b4],
    [a3, b5],
    // etc.
]