【发布时间】:2016-02-22 13:12:21
【问题描述】:
因此,当实体上的某个值发生更改时,我会发送一封电子邮件。我只希望在更新后发送电子邮件,以防更新因任何原因而失败。所以在更新前我可以这样做
public function preUpdate(LifecycleEventArgs $args){
if ($args->hasChangedField('value') && is_null($args->getOldValue('value'))) {
$this->sendEmail();
}
}
但我需要在 postUpdate 上执行此操作,并且由于这些方法在 postUpdate 上不可用,我将其重构为如下所示:
public function postUpdate(LifecycleEventArgs $args){
$entity = $args->getEntity();
$changeSet = $args->getEntityManager()->getUnitOfWork()->getEntityChangeSet($entity);
if ($entity instanceof Entity && isset( $changeSet['value'] ) && empty( $changeSet['value'][0] )) {
$this->sendEmail();
}
}
但是,这会返回一个空的更改集,但是已经进行了更改并且可以在 preUpdate 中看到。谁能看到我做错了什么?帮助将不胜感激:)
【问题讨论】:
-
我认为在 PostUpdate 事件 Doctrine 中没有遵循任何更改 - 并且更改集将为空。您需要在 preupdate 中获取变更集并从这里处理它。
-
好的,谢谢,我确定我已经在 postUpdate 中获得了变更集,这让我很困惑