我使用symfony2和doctrine。 我希望在实体的特殊属性发生变化时进行一些更改;实际上我想保存属性的更改并具有其更改的状态。 例如,当任何字段更改执行与更改字段名称相关的操作时,我该怎么说呢。
例如,如果更改了电子邮件,请向另一个实体添加一些行。
感谢。
答案 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已经有了满足您需求的方法,例如hasChangedField
,getNewValue
..
你可以在这里阅读更多内容:
http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#preupdate