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);但是不起作用