Doctrine orm Doctrine2 PostPersist:更新相应的实体

Doctrine orm Doctrine2 PostPersist:更新相应的实体,doctrine-orm,updating,Doctrine Orm,Updating,我有两个实体(请注意,忽略了不相关的方法和属性): 经理可以有很多推荐人。一个引用完全属于一个管理者。我的模型应该针对查询进行优化,因此为了避免昂贵的联接(Manager有更多的关联),我向Manager模型添加了$referencesCount属性,您可能猜到了,该属性保存了它的引用数。新引用被持久化后,$referencesCount应该增加。但目前情况并非如此。我错过了什么?(我已经厌倦了cascade={“all”}但它对我不起作用)你应该加上 cascade={“all”} 至参考实体

我有两个实体(请注意,忽略了不相关的方法和属性):

经理可以有很多推荐人。一个引用完全属于一个管理者。我的模型应该针对查询进行优化,因此为了避免昂贵的联接(Manager有更多的关联),我向Manager模型添加了$referencesCount属性,您可能猜到了,该属性保存了它的引用数。新引用被持久化后,$referencesCount应该增加。但目前情况并非如此。我错过了什么?(我已经厌倦了cascade={“all”}但它对我不起作用)

你应该加上

cascade={“all”}

参考
实体(不仅适用于
管理者


并将
@PostPersist
替换为
@PrePersist

可能您在更改管理器实体的属性后忘记了持久化它,是吗?可能是键入错误
@HasLifecycleCallbacs
vs
@HasLifecycleCallbacks
@Crisp-不,这不是打字错误:)@lazyhammer-我只需要自动完成,我的意思是当我持久化引用对象时。我添加了Cascade={“all”}对于引用中的多个对象和管理器中的多个对象-它不能像我预期的那样工作。请尝试将
@postersist
替换为
@PrePersist
。因为级联首先存储在内存中,并在持久化之前执行。
/**
* @Entity
*/
class Manager {

   /**
    * @Column(type="integer")
    */
    private $referencesCount;

    /**
    * @OneToMany(targetEntity="Reference", mappedBy="manager")
    */
    private $references;

    public functions increaseReferenceCount() {
        $this->referencesCount++;
    }

     // other properties and methods
}


/**
* @Entity
* @HasLifecycleCallbacks
*/
class Reference {

    /**
    * @ManyToOne(targetEntity="Manager", inversedBy="references")
    * @JoinColumn(nullable=false)
    */
    private $manager;

    /**
    * @PostPersist
    */
    public function updateManagerReferenceCount() {
        $this->manager->increaseReferenceCount()
    }

     // other properties and methods
}