显然使用ModelCriteria::FORMAT_ON_DEMAND
(PropelOnDemandFormatter
)不仅会逐行制作Propel水合物对象,而且不会将实例汇集as documented,但水合作用会发生在同一个物体上< /强>
这意味着下面示例中的$object
始终保持不变,只有其内容会发生变化。
$objects = ObjectQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->find();
foreach ($objects as $object) {
}
如果您的Propel对象具有未映射到数据库表列但在对象中管理的其他数据,则会出现此问题。
为什么选择这种设计,比如干净地实例化一个物体,然后给它保湿? 使用此设计决策的推荐方法是什么?
答案 0 :(得分:0)
我的猜测是,这是为了获得更好的性能,因为不需要实例化。
如果您的代码需要使用按需提取,则应该为正在提取的对象的类覆盖postHydrate()
,以便对Propel不会自动映射到列的数据执行任何必要的对象相关更新
请注意,ensureConsistency()
仅在&#34;补液&#34;这显然不是这种情况。
另外,不要存储对象引用。它们都将使用最后提取的记录引用同一个对象。