在Doctrine 1.2中使用HYDRATE_ARRAY保持选定的字段顺序

时间:2011-09-06 09:25:30

标签: php doctrine

我的问题很简单,但我无法找到答案。

当我执行如下查询时:

$query->select('t2.name as t2_name, t1.name as t1_name')
->from('table1 t1')
->leftJoin('t1.table2 t2')
->execute(array(), Doctrine_Core::HYDRATE_ARRAY);

Doctrine给我一个像:

这样的数组
array(
[0] => array(
't1_name' => 'foo',
't2_name' => 'bar'
)
)

我期望在t1_name之前在数组中设置字段t2_name。

无论如何要保持这些选定字段在Doctrine中的顺序吗?

1 个答案:

答案 0 :(得分:1)

Doctrine将自动包含主(根)表的关键字段,并自动将其作为任何查询中的第一列,几乎适用于所有水合类型。

由于table1是查询中的根表,因此它将其移动到开头以获得其自身的内部处理优势。

我发现这种行为有时令人讨厌并且有些不可预测,但通过创建定制水合物已经找到了很大的缓解。

我在代码中多次使用了good example of creating a key/value hydrator

您可以执行类似操作,按照您想要的顺序重新排列字段。

我也发布了an explanation to a very similar question here这可能是有益的。