Doctrine的hasChangedField用于说明监听器中所做的更改

时间:2014-04-02 12:11:08

标签: php doctrine-orm

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

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

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

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

1 个答案:

答案 0 :(得分:1)

如果您在eventArgs中编辑实体,我认为您需要保留它,然后在UnitOfWork中运行computeChangeSet或computeChangeSets,以便您使用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 */
}