Doctrine 1.2 hydrate方法 - 数组到模型对象

时间:2012-09-19 14:55:31

标签: php doctrine doctrine-1.2

我对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

2 个答案:

答案 0 :(得分:2)

如果偶然发现this,请查看文档。

您是否试过fromArray代替hydrate

答案 1 :(得分:0)

尽量回答这个问题,但这并不多,因为我从未直接处理过水合作用。

使用数组作为水合方法的问题在于,您基本上会丢失附加到原始查询的所有元数据,最重要的是表名。

解决这个问题的方法是编写自己的水合方法,将数组转换回对象。