我有一个像这样的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
我假设aReference
是ManyToOne
或OneToOne
标记的引用EntityA
的字段。
该操作的结果将是一个具有以下伪结构的数组:
[
[a1, b1],
[a1, b2],
[a1, b3],
[a2, b1],
[a2, b4],
[a3, b5],
// etc.
]