Php 更新子实体时调用父实体的Lifecyclecallback

Php 更新子实体时调用父实体的Lifecyclecallback,php,symfony,doctrine,entity,Php,Symfony,Doctrine,Entity,在我的条令项目中,我有两个实体具有一对一/多对一关系。它们都有一个lifecyclecallback函数来计算不同的属性。例如,第一个实体ShoppingCart有一个聚合字段:totalArticlePrice,用于计算所有物品的总价: /** * @ORM\PostUpdate * @ORM\PostPersist * @ORM\PostLoad */ public function lifecycle(LifecycleEventArgs $args): void {

在我的条令项目中,我有两个实体具有一对一/多对一关系。它们都有一个lifecyclecallback函数来计算不同的属性。例如,第一个实体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

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


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

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

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