我注意到最近在symfony 3.3下我没有真正遇到过这种教义的行为。
如果我使用带有一些连接的querybuilder,在我得到的结果集中,我最终得到结果数组中新行的每个表 - 例如,如果我将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 / doctrine,我可以得到一个结果数组,其中每个元素对应于结果集中的一行?也许有上述每个实体对象的键?
或者,除此之外,人们通常如何使用它? 它是否安全'迭代这样的结果集并将上面例子中的每组3个数组元素处理成一行'?即,将数组块化为3个,或一次迭代3个?
这种行为让我很惊讶,看起来很不直观。这里任何关于这背后的想法的教育也可能有所帮助。
此外,当我使用HYDRATE_ARRAY时,这似乎并没有在我定义的任何OneToOne,OneToMany或ManyToOne关系中保留相关实体。我期待一个包含我相关实体属性的多维数组......一厢情愿,或者这可以实现(再次没有其他辅助方法)
全部谢谢!
*编辑 - 我的例子中的错误
答案 0 :(得分:0)
在没有看到您的实际查询的情况下,我无法肯定地说,但我怀疑您正在使用获取联接。
e.g。 SELECT u, a FROM User u JOIN u.address a
以下是docs解释此问题的相关部分:
当Doctrine使用fetch-join对查询进行水合时,它会返回结果数组根级别的FROM子句中的类。
将其与此查询进行比较:SELECT u FROM User u JOIN u.address a
。使用此查询,将返回一个User
个实例数组,并获取每个用户的地址并将其水合到User#address
变量中。