Php 条令';s hasChangedField以说明侦听器中所做的更改

Php 条令';s hasChangedField以说明侦听器中所做的更改,php,doctrine-orm,Php,Doctrine Orm,我有一个用户实体,我想在被禁止时将其存档。我有以下preUpdate侦听器: /** * @ORM\PreUpdate */ public function preUpdate(PreUpdateEventArgs $eventArgs) { if ($eventArgs->hasChangedField('banned') { $this->setIsArchived(true); } if ($eventArgs->hasCha

我有一个用户实体,我想在被禁止时将其存档。我有以下
preUpdate
侦听器:

/**
 * @ORM\PreUpdate
 */
public function preUpdate(PreUpdateEventArgs $eventArgs) {
    if ($eventArgs->hasChangedField('banned') {
        $this->setIsArchived(true);
    }

    if ($eventArgs->hasChangedField('isArchived')) {
        /* do Special work here */
    }
}

如何通知
eventArgs
处理程序本身内部已更改的字段?

如果您在eventArgs中编辑实体,我认为您需要保留它,然后在UnitOfWork中运行computeChangeSet或computeChangeSet,以便使用hasChangedField:

$entity = $eventArgs->getObject();
$em = $eventArgs->getObjectManager();
$uow = $em->getUnitOfWork();

if ($eventArgs->hasChangedField('banned') {
    $entity->setIsArchived(true);
    $em->persist($entity);
}

$uow->computeChangeSets();

if ($eventArgs->hasChangedField('isArchived')) {
    /* do Special work here */
}

您需要更新eventArgs吗?你就不能自己用一个简单的布尔值来跟踪它吗?即使您要更新eventArgs,实际上您也在做同样的事情。更新eventArgs比使用boolean更好,我找到了一个可能的anwser,它使用$em->getUnitOfWork()->getEntityChangeSet($entity);但是不起作用