【问题标题】:Call Lifecyclecallback of parent entity when child entity is updated子实体更新时调用父实体的 Lifecyclecallback
【发布时间】:2021-02-09 18:53:30
【问题描述】:

我的学说项目中有两个具有 oneToMany/ManyToOne 关系的实体。它们都有一个生命周期回调函数来计算不同的属性。例如,第一个实体 ShoppingCart 有一个聚合字段:totalArticlePrice,它计算所有文章的总价格:

 /**
 * @ORM\PostUpdate
 * @ORM\PostPersist
 * @ORM\PostLoad
 */
 public function lifecycle(LifecycleEventArgs $args): void {
        
   /** Total price */
   foreach($this->articles as $article) {
     $this->totalArticlePrice += $article->getPriceTotal();
   }
 }

在我的 Angular 应用程序中,我创建了一个可以包含多篇文章的 ShoppingCart(这很好用!)在所有文章下方有一个字段列出了所有文章的总价格:totalArticlePrice

问题是当我添加新文章时总价没有更新。但是如果我刷新页面总价是正确的。所以我需要一种方法来告诉我的实体,如果其中一个被更新,另一个也应该更新以同时获取两个数据。添加新文章后重新加载页面并不是真正的显示总量的解决方案。

除此之外一切正常,因此只需要一种在更新其他实体时更新实体的方法。

【问题讨论】:

    标签: php symfony doctrine entity


    【解决方案1】:

    我认为最好为文章创建一个生命周期事件并在其中触发 ShoppingCart 的总价计算。我还建议将 totalPrice 逻辑移动到刚刚被生命周期()调用的另一种方法,以便您可以手动触发它而不会在将来造成问题(就像触发这些事件时您可能想要做的其他事情一样) .

    目前,我假设刷新后价格是正确的,因为在“添加文章”路由上没有触发 PostLoad 事件,因为 ShoppingCart 已经在实体管理器中。您可以在添加文章后在 ShoppingCart 上使用“刷新”来触发它(假设它不是 API 平台生成的路由或其他东西)。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 2019-12-05
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2020-04-19
      • 2021-02-19
      相关资源
      最近更新 更多