Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

DDC-1509 - Fix regression in doMerge() introduced with the DDC-1383 b…

…ugfix
  • Loading branch information...
commit 80fae20f749f8db95156e333c430780a0717002f 1 parent ef33454
@beberlei beberlei authored
View
13 lib/Doctrine/ORM/UnitOfWork.php
@@ -1700,21 +1700,18 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, $ass
// do not merge fields marked lazy that have not been fetched.
continue;
} else if ( ! $assoc2['isCascadeMerge']) {
- if ($this->getEntityState($other, self::STATE_DETACHED) == self::STATE_MANAGED) {
- $prop->setValue($managedCopy, $other);
- } else {
-
+ if ($this->getEntityState($other, self::STATE_DETACHED) !== self::STATE_MANAGED) {
$targetClass = $this->em->getClassMetadata($assoc2['targetEntity']);
$relatedId = $targetClass->getIdentifierValues($other);
if ($targetClass->subClasses) {
- $entity = $this->em->find($targetClass->name, $relatedId);
+ $other = $this->em->find($targetClass->name, $relatedId);
} else {
- $proxy = $this->em->getProxyFactory()->getProxy($assoc2['targetEntity'], $relatedId);
- $prop->setValue($managedCopy, $proxy);
- $this->registerManaged($proxy, $relatedId, array());
+ $other = $this->em->getProxyFactory()->getProxy($assoc2['targetEntity'], $relatedId);
+ $this->registerManaged($other, $relatedId, array());
}
}
+ $prop->setValue($managedCopy, $other);
}
} else {
$mergeCol = $prop->getValue($entity);
View
146 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php
@@ -0,0 +1,146 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+use Doctrine\ORM\UnitOfWork;
+
+/**
+ * @group DDC-1509
+ */
+class DDC1509Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+
+ protected function setUp()
+ {
+ parent::setUp();
+
+ try {
+ $this->_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1509AbstractFile'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1509File'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1509Picture'),
+ ));
+ } catch (\Exception $ignored) {
+
+ }
+ }
+
+ public function testFailingCase()
+ {
+ $file = new DDC1509File;
+ $thumbnail = new DDC1509File;
+
+ $picture = new DDC1509Picture;
+ $picture->setFile($file);
+ $picture->setThumbnail($thumbnail);
+
+
+ /* @var $em \Doctrine\ORM\EntityManager */
+ $em = $this->_em;
+ $em->persist($picture);
+ $em->flush();
+ $em->clear();
+
+ $id = $picture->getPictureId();
+
+ $pic = $em->merge($picture);
+ /* @var $pic DDC1509Picture */
+
+ $this->assertNotNull($pic->getThumbnail());
+ $this->assertNotNull($pic->getFile());
+ }
+
+}
+
+/**
+ * @Entity
+ */
+class DDC1509Picture
+{
+
+ /**
+ * @Column(type="integer")
+ * @Id
+ * @GeneratedValue(strategy="AUTO")
+ */
+ private $id;
+
+ /**
+ * @ManyToOne(targetEntity="DDC1509AbstractFile", cascade={"persist", "remove"})
+ */
+ private $thumbnail;
+
+ /**
+ * @ManyToOne(targetEntity="DDC1509AbstractFile", cascade={"persist", "remove"})
+ */
+ private $file;
+
+ /**
+ * Get pictureId
+ */
+ public function getPictureId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set file
+ */
+ public function setFile($value = null)
+ {
+ $this->file = $value;
+ }
+
+ /**
+ * Get file
+ */
+ public function getFile()
+ {
+ return $this->file;
+ }
+
+ public function getThumbnail()
+ {
+ return $this->thumbnail;
+ }
+
+ public function setThumbnail($thumbnail)
+ {
+ $this->thumbnail = $thumbnail;
+ }
+
+}
+
+/**
+ * @Entity
+ * @InheritanceType("SINGLE_TABLE")
+ * @DiscriminatorColumn(name="discr", type="string")
+ * @DiscriminatorMap({"file" = "DDC1509File"})
+ */
+class DDC1509AbstractFile
+{
+
+ /**
+ * @Column(type="integer")
+ * @Id
+ * @GeneratedValue(strategy="AUTO")
+ */
+ public $id;
+
+ /**
+ * Get fileId
+ */
+ public function getFileId()
+ {
+ return $this->id;
+ }
+
+}
+
+/**
+ * @Entity
+ */
+class DDC1509File extends DDC1509AbstractFile
+{
+
+}
Please sign in to comment.
Something went wrong with that request. Please try again.