【发布时间】:2014-04-09 09:12:07
【问题描述】:
我有一个侦听 onFlush 事件的 Doctrine 事件侦听器。保存时,我使用它来更新实体上的 eTag。
我需要访问计划删除的实体,所以我可以访问它们的关联对象,但是:
我使用的是可软删除过滤器,因此实体实际上不在$uow->getScheduledEntityDeletions() 中,而是在$uow->extraUpdates 中,标记已删除标志已更改。
这个变量是私有的,我不知道有任何程序化的方式可以得到这个变化的通知。有什么想法吗?
private function updateIfRequired(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
// Entities either updated or just inserted
$upsertedEntities = array_merge(
$uow->getScheduledEntityUpdates(),
$uow->getScheduledEntityInsertions()
);
foreach ($upsertedEntities as $entity) {
if ($entity instanceof ETaggableInterface || $entity instanceof ETagRelatedInterface) {
$this->updateETag($entity);
}
}
// When soft-deleted, this and getScheduledEntityUpdates are both empty!
$deletedEntities = $uow->getScheduledEntityDeletions();
foreach ($deletedEntities as $entity) {
$this->deletedEntities[spl_object_hash($entity)] = $entity;
$this->updateETag($entity);
}
}
【问题讨论】:
标签: symfony doctrine-orm unit-of-work etag