【问题标题】:ZF2 Doctrine: When to flush ObjectManagerZF2 原则:何时刷新 ObjectManager
【发布时间】:2013-09-14 05:01:54
【问题描述】:

何时是刷新实体/对象管理器的最佳“时间”? 应该在每次坚持操作之后吗?或者它应该运行一次,例如发货后?

【问题讨论】:

  • postDepatch 到底是什么意思?正如教义文档所建议的那样,您可以在调用 flush($entity) 时显式刷新单个实体以避免各种实体的整个映射?是这个意思吗?
  • 我的意思是最好的做法是,是在我坚持某些东西后立即刷新 EntityManager,还是在调度控制器后刷新 EntityManager 更好?
  • 您能否提供一个代码示例,说明您计划在调度后如何进行刷新我可能会误解您。 U 通常在验证数据后持久化然后刷新。

标签: doctrine-orm zend-framework2 flush


【解决方案1】:

在每次持久化之后运行它实际上是一种反模式。理想情况下,您应该在请求结束时运行一次。

我不会把它放在 postDispatch 处理程序中,因为这意味着它会在每个请求之后运行,并且在例如列出具有许多关系的实体的列表页面上,这将是昂贵的性能,因为 Doctrine将不得不检查许多实体的变化。

将其放在修改数据的操作的末尾。

【讨论】:

    【解决方案2】:

    理想情况下,在请求结束时一次。但是,如果您使用的实体太多,最好尽快刷新,并且不要让工作单元因实体而过载。这是事情变得非常奇怪的时候,因为 spl_object_hash 的问题并不能识别所有具有唯一性的对象。

    也可以使用 clear(),一旦你完成了一些实体并将开始使用其他实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 2011-09-03
      • 2015-07-12
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多