8

hydrate()我对 Doctrine 模型方法有一点问题。我使用这种方法从给定的数组中水合一个具体模型的对象,如下所示:

$model = new Doctrine\Model\Model;
$model->hydrate($model_array);

在没有嵌套子模型的情况下为简单对象补水时,一切都很完美。现在的问题是我需要水合(使用此方法)具有嵌套对象(其中一些也具有嵌套对象)的对象。

如果我使用HYDRATE_RECORD它会很好,但是查询中的所有记录都将作为对象返回,这意味着更多的内存消耗。因此,我正在使用HYDRATE_ARRAY并按需将该具体数组水合到一个对象中。

假设我有一个模型 A,它有嵌套模型 AB、AC(一对多),AD 和 AC 有另一个嵌套模型 ACE。在print_rA 数组之后,我们可以看到这个结构:

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不,查询数据库时我不能使用。

4

2 回答 2

2

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

你有没有尝试过fromArray而不是hydrate

于 2012-11-24T23:54:00.510 回答
0

试图根据我的教义知识来回答这个问题,这并不多,因为我从未直接处理过水合作用。

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

对此的解决方案可能是编写自己的水合方法,将数组转换回对象。

于 2012-09-28T05:38:09.230 回答