【发布时间】:2011-12-22 20:47:45
【问题描述】:
我使用 sfPropelORMPlugin。 如果我在每个网页上操作一个对象,则延迟加载是可以的。但是如果有数百个,我会得到数百个单独的数据库查询。我想完全禁用延迟加载或在那些特别重的页面上为所需的列禁用它,但到目前为止找不到方法。
【问题讨论】:
标签: symfony1 model runtime lazy-loading propel
我使用 sfPropelORMPlugin。 如果我在每个网页上操作一个对象,则延迟加载是可以的。但是如果有数百个,我会得到数百个单独的数据库查询。我想完全禁用延迟加载或在那些特别重的页面上为所需的列禁用它,但到目前为止找不到方法。
【问题讨论】:
标签: symfony1 model runtime lazy-loading propel
您应该在构建查询时join 所有关系,这样您就可以在一个查询中获取所有数据。请注意,您必须使用joinWithRelation(),其中Relation 是相关的表名。
【讨论】:
详细说明 William Durand 的回答,也许您还应该查看 Propel 函数 doSelectjoinAll(),它应该预加载与您的关系相关的所有对象。请记住,这可能会很昂贵,因为它与内存有关。
另一种技术是使用您需要的连接创建自定义标准,然后使用手动水合物技术添加到您的基础对象。当我需要的数据使用未完全映射到对象的聚合或其他列时,我经常这样做。周围有很多 hydrate() 示例。
【讨论】:
为对等添加了实用方法,以便能够设置我想要加载的列。对这种类型的数据库查询使用“伪列”。我也重写了 hydrate() 来理解这个“标记”。一切都很好,直到我发现即使数据是水合的,symfony 也不会理解它,也不会让你按预期使用它。
PS 加入从未被视为一种选择,因为网站负载很高。
【讨论】: