2014-04-02 18 views
2

我有一个用户实体,我想存档时禁用。我有以下preUpdate听众:主义的hasChangedField帐户在听众所做的更改

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

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

如何通知eventArgs有关处理程序本身内改变的领域?

+0

你需要更新EventArgs的?你不能用一个简单的布尔值来跟踪这个吗?即使你要更新eventArgs,你也会做同样的事情。 – Dragony

+0

它更好的做法来更新eventArgs比使用布尔,我发现$ em-> getUnitOfWork() - > getEntityChangeSet($实体)可能anwser;但不起作用 – Clavat

回答

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 */ 
}