我有像这样的dql查询
"SELECT a, b FROM EntityA a JOIN a.variable b"
我希望Doctrine给我一个结果列表,其中每个条目都是一个数组(对象(EntityA),对象(EntityB))。所以我确定两个对象“a”和“b”是相关的。
实际上,当我运行此查询时,我得到一个分隔对象“a”和“b”的列表(我使用{}表示法来表示列表)
{object(EntityA),object(EntityB),object(EntityA),object(EntityB),...}
我不想依赖于奇数位置有EntityA对象和偶数位置EntityB对象的事实。这绝对不可靠。我想检索一个像
这样的列表{array(object(EntityA),object(EntityB)),array(object(EntityA),object(EntityB)),...}
现在,我知道如果我选择 ONE 实体+ n标量值,我会得到混合结果,例如
"SELECT a, b.id AS b_id FROM EntityA a JOIN a.variable b"
,结果是
{array(object(EntityA),'b_id'=> value },array(object(EntityA),'b_id'=> value }, ...}
但是有人知道如何在选择多个entites的情况下强制这种混合结果吗?
注1 :在对象或数组不变的情况下保湿结果
Note2 :从Doctrine文档中,“Fetching Multiple FROM Entities”部分报告
如果您获取FROM子句中列出的多个实体,那么水合作用将返回迭代不同顶级实体的行。
所以,也许我应该尝试另一种方法,但我不知道是什么
Note3 :我尝试了这个技巧(多个实体+一个虚拟标量)
"SELECT a, b, 1 AS b_id FROM EntityA a JOIN a.variable b"
但它无法正常工作
Note4 :我不想从“a”访问“b”。为了简单起见,我直接显示了它们,但在我看来是间接关联的。
由于
答案 0 :(得分:0)
您正在寻找的是任意连接(从Doctrine ORM 2.3开始支持):
SELECT
a,
b
FROM
EntityA a
JOIN
EntityB b
WITH
b.aReference = a.id
我认为aReference
是引用ManyToOne
的{{1}}或OneToOne
标记字段。
此操作的结果将是一个具有以下伪结构的数组:
EntityA