2011-12-22 64 views
1

我使用sfPropelORMPlugin。 如果我对每个网页上的一个对象进行操作,则Lazyload是可以的。但是,如果有数百个我会得到数百个单独的数据库查询。我想完全禁用lazyload,或者在那些特别重的页面上禁用它,以便找到需要的列,但目前还找不到方法。如何在运行时更改Symfony中的模型lazyloadness?

回答

0

添加实用程序方法,以便能够设置我想要加载的列。对这种类型的数据库查询使用“伪列”。我也重写了水合物()来理解这个“标记”。一切都很好,直到我发现即使数据已经水化,symfony也不会理解它,并且不会让你按预期使用它。

PS连接从未被认为是一种选择,因为网站是一种高负载。

1

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

0

在William Durand的回答中详细说明,也许你还应该看看Propel函数doSelectjoinAll(),它应该预加载所有与你的关系相关的对象。请记住,这可能是昂贵的,因为它涉及到内存。

另一种技术是创建一个自定义标准与您需要的连接,然后使用手动水合技术添加到您的基础对象。我经常这样做,当我需要的数据是使用聚合或其他列没有完全映射到对象。有大量的水合物()例子。