什么级联"刷新"在Doctrine 2中意味着什么?

时间:2016-01-20 10:44:54

标签: php doctrine-orm

什么级联"刷新"在Doctrine2中意味着什么?它是实体更新操作吗?

更新

现在看来,如果更改类别名称,则将获取并更新所有相关产品。但是,由于通常实体仅通过id相关,因此没有意义获取所有产品,因为在子表中没有任何更新。 出于这个原因,我认为"刷新"类似于MySQL" ON UPDATE CASCADE" - 如果更改了父主键,则子值也将更改以反映该值。所以主义&#​​34;刷新"操作仅在ORM级别相同。只有更新父母身份才有意义,对吗?

1 个答案:

答案 0 :(得分:6)

您可以找到文档here,但总结一下,我会复制一些重点:

  

坚持,删除,分离,刷新和合并个人   实体可能会变得相当繁琐,特别是当高度时   涉及交织的对象图。因此,学说2提供了一个   通过级联这些传递持久性的机制   操作。每个关联到另一个实体或一个集合   实体可以配置为自动级联某些   操作。默认情况下,不会级联任何操作。

     

存在以下级联选项:

     
      
  • persist:Cascades将操作持久保存到关联实体。
  •   
  • 删除:级联删除对关联实体的操作。
  •   
  • merge:Cascades将操作合并到关联实体。
  •   
  • detach:Cascades将操作分离给相关实体。
  •   
  • refresh:级联刷新对关联实体的操作。
  •   

复制所有部分是不必要的,因为每个人都可以打开链接,但是从这一部分可以清楚地了解级联的想法。

通过学说对关联做一些自动化的事情。

refresh cascade案例中,当您在@oneToMany关联上定义此级联时,如果您在一侧执行collection,则要求学说更多地刷新refresh

假设我们one-to-manyCategory个实体之间存在Product关联。如果您为此定义此级联,则每次在任何refresh上调用Category时,其Products Collection都将刷新。{/ p>

关于这部分问题:是实体更新操作吗?是,在Refresh这意味着从数据源中将集合和实体提取到内存中。

  

级联操作在内存中执行。这意味着收藏和   相关实体被提取到内存中,即使它们仍然存在   在即将执行级联操作时标记为延迟。   但是,此方法允许执行实体生命周期事件   对于每个操作。

     

但是,在级联上将对象图拉入内存可能会导致   相当大的性能开销,尤其是在级联时   收藏很大。确保权衡利弊   您定义的每个级联操作。