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