diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index c74329581..61a3c7ecc 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -943,12 +943,13 @@ class UnitOfWork implements PropertyChangedListener } if ($changeSet) { - $this->entityChangeSets[$oid] = (isset($this->entityChangeSets[$oid])) - ? array_merge($this->entityChangeSets[$oid], $changeSet) - : $changeSet; - + if (isset($this->entityChangeSets[$oid])) { + $this->entityChangeSets[$oid] = array_merge($this->entityChangeSets[$oid], $changeSet); + } else if ( ! isset($this->entityInsertions[$oid])) { + $this->entityChangeSets[$oid] = $changeSet; + $this->entityUpdates[$oid] = $entity; + } $this->originalEntityData[$oid] = $actualData; - $this->entityUpdates[$oid] = $entity; } } @@ -2405,12 +2406,12 @@ class UnitOfWork implements PropertyChangedListener } } else { $visited = array(); - + foreach ($this->identityMap as $className => $entities) { if ($className !== $entityName) { continue; } - + foreach ($entities as $entity) { $this->doDetach($entity, $visited, false); } @@ -2522,7 +2523,7 @@ class UnitOfWork implements PropertyChangedListener $id = array($class->identifier[0] => $id); } - + $idHash = implode(' ', $id); if (isset($this->identityMap[$class->rootEntityName][$idHash])) {