繁体   English   中英

Symfony 5.4 自动检测实体属性已随 doctrine.orm.entity_listener

[英]Symfony 5.4 detect autmatically the entity properties have changed with doctrine.orm.entity_listener

如果实体名称已更新,我创建了一个事件侦听器来发送 email。 我的问题是,我想知道哪些属性发生了变化(例如),$entity->getName() = “Jim” 变成了“Jimmy”?

/.\ 我将只检测更改的属性。


public function postUpdate(Entity $entity, LifecycleEventArgs $event): void {
    // “Jim”


    // Now is “Jimmy”

}

谢谢

$event->get(Entity|Object)Manager()->getUnitOfWork()->getEntityChangeSet($entity)

我认为在您的情况下使用 preUpdateEvent 会更好。

Doctrine\ORM\Event\PreUpdateEventArgs包含一些可以帮助您解决用例的方法。

例如 hasChangedField、getNewValue 和 getOldValue。

/**
 * Checks if field has a changeset.
 *
 * @param string $field
 *
 * @return bool
 */
public function hasChangedField($field)
{
    return isset($this->entityChangeSet[$field]);
}

所以你可以用 preUpdate 监听器替换你的 postUpdate 监听器:

public function preUpdate(Entity $entity, PreUpdateEventArgs $args): void {
    if($args->hasChangedField('name')){
        $newName = $args->getNewValue('name');
        $oldName = $args->getOldValue('name');
    }

}

否则,如果您想保留您的 postUpdate 侦听器,您将需要使用工作单元来查找您的实体变更集并查看名称字段是否已更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM