我对Doctrine模型hydrate()
方法有一点问题。我使用这种方法从给定的数组中水合一个conrete模型的对象,如下所示:
$model = new Doctrine\Model\Model;
$model->hydrate($model_array);
使用嵌套的子模型对简单物体进行保湿时,一切都很完美。现在的问题是我需要使用嵌套对象来水合(使用此方法)一个对象(其中一些对象也有嵌套对象)。
如果我使用的是HYDRATE_RECORD
,那么查询中的所有记录都将作为对象返回,这意味着更多的内存消耗。因此,我正在使用HYDRATE_ARRAY
并按需将具体数组保存到对象中。
假设我有一个模型A,它有嵌套模型AB,AC(一对多),AD和AC有另一个嵌套模型ACE。在A数组的print_r
之后,我们可以看到这个结构:
A Array (
...
ab Array ( ... )
ac Array (
AC Array (
...
ace Array ( ... )
)
AC Array (
...
ace Array ( ... )
)
...
)
ad Array ( ... )
)
通常在使用水合物后我会认为这是我的目标:
A Object {
...
ab Object { ... }
ac Array (
AC Object {
...
ace Object { ... }
}
AC Object {
...
ace Object { ... }
}
...
)
ad Object { ... }
}
但不是这样,我得到了这个结构:
A Object {
...
ab Array ( ... )
ac Array (
AC Array (
...
ace Array ( ... )
)
AC Array (
...
ace Array ( ... )
)
...
)
ad Array ( ... )
}
因此只有主模型被转换为对象。 您是否了解如何将所有嵌套模型数组转换为假定结果的对象?
不,我在查询数据库时无法使用HYDRATE_RECORD
。
答案 0 :(得分:2)
如果偶然发现this,请查看文档。
您是否试过fromArray
代替hydrate
?
答案 1 :(得分:0)
尽量回答这个问题,但这并不多,因为我从未直接处理过水合作用。
使用数组作为水合方法的问题在于,您基本上会丢失附加到原始查询的所有元数据,最重要的是表名。
解决这个问题的方法是编写自己的水合方法,将数组转换回对象。