来自DQL select的强制混合结果

时间:2014-03-08 19:47:13

标签: php doctrine-orm

我有像这样的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”。为了简单起见,我直接显示了它们,但在我看来是间接关联的。

由于

1 个答案:

答案 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