在Doctrine preUpdate事件中插入并取消更新

时间:2014-09-15 10:05:31

标签: symfony doctrine-orm

在我的事件中,我检查开始日期是否改变,如果是,那么我想插入新行,并取消更新

if ($args->hasChangedField('startAt')) {
    // cancel update
    // insert new entity
}

我做过类似的事情

public function preFlush(PreFlushEventArgs $args)
{
    $em = $args->getEntityManager();

    /** @var UnitOfWork $unitOfWork */
    $unitOfWork = $em->getUnitOfWork();

    $identityMap = $unitOfWork->getIdentityMap();

    if (0 === count($identityMap)) {
        return;
    }

    foreach ($identityMap as $entities) {
        foreach ($entities as $entity) {
            if ($entity instanceof Settelment) {
                $original = $unitOfWork->getOriginalEntityData($entity);

                if ($entity->getStartAt() !== $original['startAt']) {
                    $em->detach($entity); // remove entity
                }
            }
        }
    }

}

但是现在我删除了实体,但是我没有在这里定义新对象并坚持下去,我在数据库中得到了额外的行(这就是我想要的)但它是如何工作的?如果我没有创建实体,为什么我得到额外的行。

0 个答案:

没有答案
相关问题