【发布时间】:2014-10-28 08:52:56
【问题描述】:
我将 symfony2 与教义一起使用。 当实体的特殊属性发生变化时,我想做一些更改;实际上我想保存我的属性的更改并了解它的更改状态。 例如,当任何字段更改与更改的字段名称相关时,我怎么能说。
例如,如果电子邮件发生更改,则向其他实体添加一些行。
谢谢。
【问题讨论】:
标签: symfony doctrine-orm updates
我将 symfony2 与教义一起使用。 当实体的特殊属性发生变化时,我想做一些更改;实际上我想保存我的属性的更改并了解它的更改状态。 例如,当任何字段更改与更改的字段名称相关时,我怎么能说。
例如,如果电子邮件发生更改,则向其他实体添加一些行。
谢谢。
【问题讨论】:
标签: symfony doctrine-orm updates
您应该能够使用 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 扩展注册其更改的方式。
【讨论】:
persist 之前对其应用了一些更改)。我不确定你的问题。 “性能”?
除了 Yan 的回答之外,Doctrine 已经有了满足您需求的方法,例如 hasChangedField、getNewValue..
你可以在这里阅读更多:
http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#preupdate
【讨论】: