【发布时间】:2012-09-19 14:55:30
【问题描述】:
我对 Doctrine 模型 hydrate() 方法有一点问题。我使用这种方法来对给定数组中的具体模型对象进行水合,如下所示:
$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 ( ... )
)
通常在使用 hydrate 后,我会假设这将是我的对象:
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。
【问题讨论】:
-
@j0k 为什么我不应该感谢您的回答?
-
网站政策,没有签字,谢谢,实际问题中的那种东西 - 因为它不是问题的一部分。在 cmets 中很好。
-
你试过
HYDRATE_ON_DEMAND吗? -
@Jack,HYDRATE_ON_DEMAND 是我唯一想阻止的事情,因为延迟加载。无论如何,按需补水会为对象补水,但仅在需要时才补水。我的问题是如何将模型对象数组转换为具有所有关系的教条记录对象。
标签: php doctrine doctrine-1.2