preUpdate:知道哪些字段已被修改(ManyToMany)

时间:2017-05-19 09:48:24

标签: symfony doctrine-orm

如果编辑了2个特定属性中的一个,我在preUpdate上有一个监听器来执行操作。

对于其中一个,我很容易使用$uow->getScheduledCollectionUpdates(),但第二个字段是ManyToMany关系,目前我发现它public function preUpdate(PreUpdateEventArgs $args) { $strain = $args->getEntity(); if (!$strain instanceof Strain) { return; } $em = $args->getEntityManager(); $uow = $em->getUnitOfWork(); $authorizedUsersChanged = false; foreach ($uow->getScheduledCollectionUpdates() as $entityScheduledUpdates) { // I can't do it because the method: 'getBackRefFieldName()' doen't exists if ('authorizedUsers' === $entityScheduledUpdates->getBackRefFieldName()) { $authorizedUsersChanged = true; break; } } if ($args->hasChangedField('public') || $authorizedUsersChanged) { dump('do something'); } } return; } 返回链接采集。在这个集合中,我想控制字段,并且有一个非常有趣的属性:backRefFieldName。但是没有方法来获得它并进行控制。

也许还有其他解决方案?

public function preUpdate(PreUpdateEventArgs $args)
{
    $strain = $args->getEntity();

    if (!$strain instanceof Strain) {
        return;
    }

    $em = $args->getEntityManager();
    $uow = $em->getUnitOfWork();

    $updateElasticsearch = false;

    if (true === $args->hasChangedField('public')) {
        $updateElasticsearch = true;
    } else {
        foreach ($uow->getScheduledCollectionUpdates() as $entityScheduledUpdates) {
            if ('authorizedUsers' === $entityScheduledUpdates->getMapping()['fieldName']) {
                $updateElasticsearch = true;
                break;
            }
        }
    }

    if (true === $updateElasticsearch) {
        // DO something
    }

    return;
}

编辑:最后我这样做,但如果有更好的方式,我感兴趣

<batch-execution lookup="defaultKieSession">
<insert out-identifier="message" return-object="true" entrypoint="DEFAULT">
<de.salt.d4s.test2.test2.input>
<order>1</order>
</de.salt.d4s.test2.test2.input>
</insert><fire-all-rules></fire>
</batch-execution>

0 个答案:

没有答案