gpt4 book ai didi

php - 从 DQL select 强制混合结果

转载 作者:行者123 更新时间:2023-12-05 07:59:12 25 4
gpt4 key购买 nike

我有一个这样的dql查询

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

我希望 Doctrine 给我一个结果列表,其中每个条目都是一个数组(object(EntityA),object(EntityB))。所以我确定“a”和“b”这两个对象是相关的。

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

{对象(实体A),对象(实体B),对象(实体A),对象(实体B),...

而且我不想依赖这样一个事实,即在奇数位置有 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}, .. .

但是有谁知道如何在选择了多个实体的情况下强制产生这种混合结果?

注意 1:水合结果作为对象或数组不会改变

注意 2:来自 Doctrine 文档,“Fetching Multiple FROM Entities”部分报告

If you fetch multiple entities that are listed in the FROM clause then the hydration will return the rows iterating the different top-level entities.

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

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

"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.
]

关于php - 从 DQL select 强制混合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274196/

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