我正在尝试在用户加入群组时执行某些操作。我正在尝试使用preUpdate事件,然后检查相应的关系是否已更改。不幸的是,在我的小组中,'用户"从不在变更集中,以及在我的用户中,用户组永远不会在变更集中。
这两位听众:
public function preUpdate(PreUpdateEventArgs $args){
if($args->hasChangedField('users')){
$old = $args->getOldValue('users');
$new = $args->getNewValue('users');
}
}
public function preUpdate(PreUpdateEventArgs $args){
if($args->hasChangedField('userGroups')){
$old = $args->getOldValue('userGroups');
$new = $args->getNewValue('userGroups');
}
}
这就是我的TestCase:
$group->addUser($user);
$em->beginTransaction();
$em->persist($group);
$em->flush();
$em->rollback();
两个侦听器都被调用,但关系永远不会在变更集中。
我想将用户添加到redis表中,我在其中管理一些特定数据。也许onFlush或其他一些事件更好,因为我不需要修改保存的数据。我只是想知道我的用户 - 用户组关系中是否有新的条目。我认为最简单的方法是检查这个是preUpdate函数中的变更集。
答案 0 :(得分:2)
我通过onFlush事件解决了它:
public function onFlush(OnFlushEventArgs $args){
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
foreach ($uow->getScheduledCollectionUpdates() as $col) {
if($this->isUserGroupUserAssociation($col->getMapping())){
$userGroup = $col->getOwner();
foreach($col->getInsertDiff() as $user){
$this->container->get('strego_user.user_manager')->triggerJoined($userGroup,$user);
}
}
}
}
protected function isUserGroupUserAssociation($association){
return($association['fieldName'] == "users" &&
$association['sourceEntity'] == "Strego\UserBundle\Entity\UserGroup"
);
}