【问题标题】:Doctrine 1.2 hydrate method - array to model objectDoctrine 1.2 水合物方法 - 数组到模型对象
【发布时间】: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 中很好。
  • this thread
  • 你试过HYDRATE_ON_DEMAND吗?
  • @Jack,HYDRATE_ON_DEMAND 是我唯一想阻止的事情,因为延迟加载。无论如何,按需补水会为对象补水,但仅在需要时才补水。我的问题是如何将模型对象数组转换为具有所有关系的教条记录对象。

标签: php doctrine doctrine-1.2


【解决方案1】:

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

您是否尝试过fromArray 而不是hydrate

【讨论】:

  • 我没试过fromArray()。但是,几个月后我没有在那个项目上工作,我不得不使用我试图避免的延迟加载......如果我再次对那个项目进行一些修改,我会试一试。现在会接受你的回答,因为它看起来很有希望!
【解决方案2】:

尽我最大的教义知识尝试回答这个问题,这并不多,因为我从未直接处理过水合作用。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多