diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 25b657304..96570971c 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -483,6 +483,8 @@ class UnitOfWork implements PropertyChangedListener $this->entityChangeSets[$oid] = $changeset; $this->getEntityPersister(get_class($entity))->update($entity); } + + $this->extraUpdates = array(); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php new file mode 100644 index 000000000..25c38426c --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php @@ -0,0 +1,48 @@ +useModelSet('cms'); + parent::setUp(); + } + + public function testIssue() + { + $test = $this; + $user = new CmsUser(); + $uow = $this->_em->getUnitOfWork(); + + $user->name = 'Marco'; + $user->username = 'ocramius'; + + $this->_em->persist($user); + $uow->scheduleExtraUpdate($user, array('name' => 'changed name')); + + $listener = $this->getMock('stdClass', array('postFlush')); + + $listener + ->expects($this->once()) + ->method('postFlush') + ->will($this->returnCallback(function () use ($uow, $test) { + $extraUpdatesReflection = new \ReflectionProperty($uow, 'extraUpdates'); + + $extraUpdatesReflection->setAccessible(true); + + $test->assertEmpty($extraUpdatesReflection->getValue($uow)); + })); + + $this->_em->getEventManager()->addEventListener(Events::postFlush, $listener); + + $this->_em->flush(); + } +}