Php 如何在preUpdate中取消属性更新
我正在尝试取消条令侦听器的preUpdate方法中的属性更新 我现在做的是:Php 如何在preUpdate中取消属性更新,php,doctrine-orm,doctrine,Php,Doctrine Orm,Doctrine,我正在尝试取消条令侦听器的preUpdate方法中的属性更新 我现在做的是: /** * @param Subject $subject * @param PreUpdateEventArgs $args */ public function preUpdate(Subject $subject, PreUpdateEventArgs $args) { $em = $args->getEntityManager(); $uow = $em->getUnitOfW
/**
* @param Subject $subject
* @param PreUpdateEventArgs $args
*/
public function preUpdate(Subject $subject, PreUpdateEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$meta = $em->getClassMetadata(Subject::class);
foreach (Subject::ENCRYPTED_FIELDS as $fieldName => $fieldType) {
$setter = "set" . ucfirst($fieldName);
$oldValueDecrypted = $this->cryptService->fromEncryptedString($args->getOldValue($fieldName), $fieldType);
if ($oldValueDecrypted == $args->getNewValue($fieldName)) {
$subject->$setter($args->getOldValue($fieldName));
$uow->recomputeSingleEntityChangeSet($meta, $subject);
}
}
}
不幸的是,它并没有像它更新的字段那样工作。另一件事是,当我打电话的时候
$uow->getEntityChangeSet($subject);
更改属性后,旧值和新值将切换,因此新值将变为原始值,反之亦然。但它对数据库操作没有影响。
我在onFlush中尝试了同样的方法,结果也一样。根据
您只需使用$eventArgs->setNewValue($fieldName,$value)
更改要更新的字段的值。
就你而言:
$eventArgs->setNewValue($fieldName, $args->getOldValue($fieldName));
我已经试过了,但它不能解决问题。即使$uow->getEntityChangeSet()显示新旧值相同,更新仍会触发。