Skip to content

Commit 79242b7

Browse files
committed
Merge pull request #1210 from VoycerAG/fix-proxy-changeset-computation
Don't compute changesets for uninitialized proxies
2 parents 23edee1 + 66e4150 commit 79242b7

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

lib/Doctrine/ODM/MongoDB/UnitOfWork.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,11 @@ private function computeAssociationChanges($parentDocument, array $assoc, $value
989989
*/
990990
public function recomputeSingleDocumentChangeSet(ClassMetadata $class, $document)
991991
{
992+
// Ignore uninitialized proxy objects
993+
if ($document instanceof Proxy && ! $document->__isInitialized__) {
994+
return;
995+
}
996+
992997
$oid = spl_object_hash($document);
993998

994999
if ( ! isset($this->documentStates[$oid]) || $this->documentStates[$oid] != self::STATE_MANAGED) {

tests/Doctrine/ODM/MongoDB/Tests/UnitOfWorkTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,31 @@ public function testGetClassNameForAssociationReturnsTargetDocumentWithNullData(
586586
$this->assertEquals('Documents\User', $this->uow->getClassNameForAssociation($mapping, null));
587587
}
588588

589+
public function testRecomputeChangesetForUninitializedProxyDoesNotCreateChangeset()
590+
{
591+
$user = new \Documents\ForumUser();
592+
$user->username = '12345';
593+
$user->setAvatar(new \Documents\ForumAvatar());
594+
595+
$this->dm->persist($user);
596+
$this->dm->flush();
597+
598+
$id = $user->getId();
599+
$this->dm->clear();
600+
601+
$user = $this->dm->find('\Documents\ForumUser', $id);
602+
$this->assertInstanceOf('\Documents\ForumUser', $user);
603+
604+
$this->assertInstanceOf('Doctrine\ODM\MongoDB\Proxy\Proxy', $user->getAvatar());
605+
606+
$classMetadata = $this->dm->getClassMetadata('Documents\ForumAvatar');
607+
608+
$this->uow->recomputeSingleDocumentChangeSet($classMetadata, $user->getAvatar());
609+
610+
$this->assertEquals(array(), $this->uow->getDocumentChangeSet($user->getAvatar()));
611+
}
612+
613+
589614
protected function getDocumentManager()
590615
{
591616
return new \Stubs\DocumentManager();

0 commit comments

Comments
 (0)