我需要为某些实体实现版本控制。
我有一个实体“Map”,它与“Spot”实体有 OneToMany 关联。“Map”和“Spot”应该是版本化的。
应该可以显示旧版本的“地图”以及所有相关的“点”。
因此,在旧版本中,“地图”本身可能有另一个背景图像,但相关“点”的位置或数量也可能不同。
我喜欢 AuditLog 的这种方法(在页面末尾): http: //www.doctrine-project.org/blog/doctrine2-versionable.html
[php]
class AuditListener implements EventSubscriber
{
public function getSubscribedEvents()
{
return array(Events::onFlush);
}
public function onFlush(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$changeDate = new DateTime("now");
$class = $em->getClassMetadata('DoctrineExtensions\Auditable\AuditEntry');
foreach ($uow->getScheduledEntityUpdates() AS $entity) {
if ($entity instanceof Auditable) {
$changeSet = $uow->getEntityChangeSet($entity);
foreach ($changeSet AS $field => $vals) {
list($oldValue, $newValue) = $vals;
$audit = new AuditEntry(
$entity->getResourceName(),
$entity->getId(),
$oldValue,
$newValue,
$changeDate
);
$em->persist($audit);
$em->getUnitOfWork()
->computeChangeSet($class, $audit);
}
}
}
}
}
我想知道如何处理可版本化实体的关联。
例如:
当“地图”发生变化时,会保存一个新的地图版本,但是与 Spots 的关联呢?当“Spot”发生变化时,它的父“Map”会怎样。
构建新版“地图”时: - 我怎么知道它有关联?- 我如何才能确定关联也是可版本化的 - 我如何处理关联
即使关联不可版本化,如果我更改关联的不可版本化实体,我也会更改旧版本的“地图”,因为它们仍然是关联的。
有没有人有经验或想法如何使用学说 2.1 来管理它?