From 65e7cc9143e818670cae6a7167c3c70736fa870a Mon Sep 17 00:00:00 2001 From: Justin Zimmerman Date: Thu, 26 Jun 2014 17:15:57 -0400 Subject: [PATCH] [DDC-3160] Change to fix that was implemented for DDC-2996. A fix for DDC-2996 was implemented that broke quite a few extensions. This commit is an attempt to fix the DDC-2996 bug without the adverse side effects seen in DDC-3160. Basically, if changes are detected that would cause a changeset to be made, but the entity is awaiting insertion, the code will not save the changeset nor flag the entity as awaiting updating in the Unit of Work. Some styling tweaks based on Pull Request guidelines. --- lib/Doctrine/ORM/UnitOfWork.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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])) {