gpt4 book ai didi

symfony - preUpdate 中的 EntityChangeSet 不包含关系?

转载 作者:行者123 更新时间:2023-12-02 10:35:17 26 4
gpt4 key购买 nike

当用户加入组时,我正在尝试执行某些操作。我正在尝试使用 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');
}
}

这是我的测试用例:

$group->addUser($user);

$em->beginTransaction();
$em->persist($group);
$em->flush();
$em->rollback();

两个监听器都被调用,但关系永远不在变更集中。

我想将用户添加到redis表中,在其中管理一些特定数据。也许 onFlush 或其他一些事件更好,因为我不需要修改保存的数据。我只想知道我的用户-用户组关系中是否有新条目。我认为检查这一点的最简单方法是 preUpdate 函数中的变更集。

最佳答案

我通过 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"
);
}

关于symfony - preUpdate 中的 EntityChangeSet 不包含关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com