当一个特殊领域发生变化时做一些事情(学说)

时间:2014-10-27 14:18:43

标签: symfony doctrine-orm updates

我使用symfony2和doctrine。 我希望在实体的特殊属性发生变化时进行一些更改;实际上我想保存属性的更改并具有其更改的状态。 例如,当任何字段更改执行与更改字段名称相关的操作时,我该怎么说呢。

例如,如果更改了电子邮件,请向另一个实体添加一些行。

感谢。

2 个答案:

答案 0 :(得分:4)

您应该可以使用Doctrine Listeners和UnitOfWork变更集执行某些操作,如下所示:

use Doctrine\ORM\Event\LifecycleEventArgs;

class DoctrineListener
{
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();

        if ($entity instanceof MyEntityClass) {
            $changeSet = $entityManager->getUnitOfWork()->getEntityChangeSet($entity);
            if (isset($changeSet['my_field'])) {
                //do something here
            }
        }
    }
}

例如,这是一些Doctrine扩展注册其更改的方式。

答案 1 :(得分:1)

除了Yan回答之外,Doctrine已经有了满足您需求的方法,例如hasChangedFieldgetNewValue .. 你可以在这里阅读更多内容:

http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#preupdate