2

我注意到最近在 symfony 3.3 下我没有真正遇到过的行为。

如果我使用带有一些连接的查询构建器,在我返回的结果集中,我最终会在结果数组中的新行上找到每个表 - 例如,如果我将 t1 和 t2 连接到 t3 上,其中每个表都是一个学说实体,我会得到一个看起来有点像这样的结果:

$results[0] => (row1 entity for t3)
$results[1] => (row1 entity for t1)
$results[2] => (row1 entity for t2)

$results[3] => (row2 entity for t3)
$results[4] => (row2 entity for t1)
$results[5] => (row2 entity for t2)

这 3 个数组项对应于构成结果集的单个连接“行”的每个实体/“表”。

我发现 HYDRATE_SCALAR 给了我一个更传统的“标量”(duh ..没有震惊)结果,其中结果数组的每个元素都包含一个完整的标量行..但是我没有得到很好的水合实体对象与:(

我想知道,有没有什么方法可以在不编写我自己的辅助方法的情况下本地使用 symfony / 学说,我可以获得一个结果数组,其中每个元素对应于结果集中的一行?也许上面每个实体对象都有键?

或者,除此之外,人们通常如何使用它?迭代这样一个结果集并将上面示例中的每组 3 个数组元素作为一个“行”处理是否“安全”?即,将数组分成 3 个,还是一次迭代 3 个?

这种行为真的让我很惊讶,而且看起来很不直观。这里的任何关于这背后的想法的教育也可能会有所帮助。

此外,当我使用 HYDRATE_ARRAY 时,这似乎不会水合我定义的任何 OneToOne、OneToMany 或 ManyToOne 关系中的相关实体。我希望一个包含我的相关实体属性的多维数组.. 一厢情愿,或者这可以实现(同样没有额外的辅助方法)

谢谢大家!

*编辑 - 我的例子中的错误

4

1 回答 1

2

如果没有看到您的实际查询,我不能肯定地说,但我怀疑您正在使用 fetch 连接。

例如SELECT u, a FROM User u JOIN u.address a

这是解释这一点的文档的相关部分:

当 Doctrine 使用 fetch-join 对查询进行水合时,它会返回结果数组根级别的 FROM 子句中的类。

将其与此查询进行比较:SELECT u FROM User u JOIN u.address a。使用此查询,将返回一个实例数组,User并获取每个用户的地址并将其混合到User#address变量中。

于 2017-07-13T17:33:09.883 回答