Propel" ModelCriteria :: FORMAT_ON_DEMAND"重用相同的对象?

时间:2015-08-19 12:31:41

标签: php orm propel

显然使用ModelCriteria::FORMAT_ON_DEMANDPropelOnDemandFormatter)不仅会逐行制作Propel水合物对象,而且不会将实例汇集as documented,但水合作用会发生在同一个物体上< /强>

这意味着下面示例中的$object始终保持不变,只有其内容会发生变化。

$objects = ObjectQuery::create()
    ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
    ->find();

foreach ($objects as $object) {
}

如果您的Propel对象具有未映射到数据库表列但在对象中管理的其他数据,则会出现此问题。

为什么选择这种设计,比如干净地实例化一个物体,然后给它保湿? 使用此设计决策的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

我的猜测是,这是为了获得更好的性能,因为不需要实例化。

如果您的代码需要使用按需提取,则应该为正在提取的对象的类覆盖postHydrate(),以便对Propel不会自动映射到列的数据执行任何必要的对象相关更新

请注意,ensureConsistency()仅在&#34;补液&#34;这显然不是这种情况。

另外,不要存储对象引用。它们都将使用最后提取的记录引用同一个对象。