【问题标题】:How to change model lazyloadness at runtime in Symfony?如何在 Symfony 运行时更改模型延迟加载?
【发布时间】:2011-12-22 20:47:45
【问题描述】:

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

【问题讨论】:

    标签: symfony1 model runtime lazy-loading propel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多