diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php index 93f6efa75..cc381e27b 100644 --- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php @@ -653,7 +653,7 @@ class BasicEntityPersister if ($found = $this->_em->getUnitOfWork()->tryGetById($joinColumnValues, $targetClass->rootEntityName)) { $this->_class->reflFields[$field]->setValue($entity, $found); // Complete inverse side, if necessary. - if ($assoc['inversedBy']) { + if ($assoc['inversedBy'] && $assoc['type'] & ClassMetadata::ONE_TO_ONE) { $inverseAssoc = $targetClass->associationMappings[$assoc['inversedBy']]; $targetClass->reflFields[$inverseAssoc['fieldName']]->setValue($found, $entity); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php new file mode 100644 index 000000000..1548552d7 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php @@ -0,0 +1,64 @@ +useModelSet('cms'); + parent::setUp(); + } + + public function testRefreshWithManyToOne() + { + $user = new CmsUser(); + $user->name = "beberlei"; + $user->status = "active"; + $user->username = "beberlei"; + + $article = new CmsArticle(); + $article->setAuthor($user); + $article->text = "foo"; + $article->topic = "bar"; + + $this->_em->persist($user); + $this->_em->persist($article); + $this->_em->flush(); + + $this->assertType('Doctrine\Common\Collections\Collection', $user->articles); + $this->_em->refresh($article); + $this->assertTrue($article !== $user->articles, "The article should not be replaced on the inverse side of the relation."); + $this->assertType('Doctrine\Common\Collections\Collection', $user->articles); + } + + public function testRefreshOneToOne() + { + $user = new CmsUser(); + $user->name = "beberlei"; + $user->status = "active"; + $user->username = "beberlei"; + + $address = new CmsAddress(); + $address->city = "Bonn"; + $address->country = "Germany"; + $address->street = "A street"; + $address->zip = 12345; + $address->setUser($user); + + $this->_em->persist($user); + $this->_em->persist($address); + $this->_em->flush(); + + $this->_em->refresh($address); + $this->assertSame($user, $address->user); + $this->assertSame($user->address, $address); + } +} \ No newline at end of file