如何在Symfony中改变运行时的模型延迟加载?

时间:2011-12-22 20:47:45

标签: symfony1 model runtime lazy-loading propel

我使用sfPropelORMPlugin。 如果我在每个网页上操作一个对象,则Lazyload是可以的。但如果有数百个,我会得到数百个单独的数据库查询。我想完全禁用lazyload或在那些特别繁重的页面上为所需的列禁用它,但到目前为止找不到方法。

3 个答案:

答案 0 :(得分:1)

在构建查询时,您应该join所有关系,这样您就可以在单个查询中获取所有数据。请注意,您必须使用joinWithRelation(),其中Relation是相关的表名。

答案 1 :(得分:0)

详细阐述William Durand的答案,也许您还应该看看Propel函数doSelectjoinAll(),它应该预先加载与您的关系相关的所有对象。请记住,这与内存相关可能很昂贵。

另一种技术是使用您需要的连接创建自定义条件,然后使用手动水合技术添加到您的基础对象。当我需要的数据使用聚合或其他未完全映射到对象的列时,我经常这样做。周围有很多水合物()例子。

答案 2 :(得分:0)

为peer添加了实用程序方法,以便能够设置我想要加载的列。对此类数据库查询使用“伪列”。另外,我已经覆盖了hydrate()来理解这个“标记”。一切都很好,直到我发现即使数据是水合的,symfony也不会理解它,也不会让你按预期使用它。

PS加入从未被视为一种选择,因为网站是一种高负荷。