Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

[DDC-2409] Fix merge association STATE_NEW #655

Merged
merged 1 commit into from

2 participants

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Apr 28, 2013
  1. @FabioBatSilva

    Fix DDC-2409

    FabioBatSilva authored
This page is out of date. Refresh to see the latest.
View
2  lib/Doctrine/ORM/UnitOfWork.php
@@ -1851,7 +1851,7 @@ 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) {
+ if (($otherState = $this->getEntityState($other)) !== self::STATE_MANAGED && $otherState !== self::STATE_NEW) {
$targetClass = $this->em->getClassMetadata($assoc2['targetEntity']);
$relatedId = $targetClass->getIdentifierValues($other);
View
72 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+use Doctrine\ORM\UnitOfWork;
+use Doctrine\Tests\Models\CMS\CmsUser;
+use Doctrine\Tests\Models\CMS\CmsArticle;
+
+/**
+ * @group DDC-2409
+ */
+class DDC2409Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+ public function setUp()
+ {
+ $this->useModelSet('cms');
+ parent::setUp();
+ }
+
+ public function testIssue()
+ {
+ $em = $this->_em;
+ $uow = $em->getUnitOfWork();
+
+ $originalArticle = new CmsArticle();
+ $originalUser = new CmsUser();
+
+ $originalArticle->topic = 'Unit Test';
+ $originalArticle->text = 'How to write a test';
+
+ $originalUser->name = 'Doctrine Bot';
+ $originalUser->username = 'DoctrineBot';
+ $originalUser->status = 'active';
+
+ $originalUser->addArticle($originalArticle);
+
+ $em->persist($originalUser);
+ $em->persist($originalArticle);
+ $em->flush();
+ $em->clear();
+
+ $article = $em->find('Doctrine\Tests\Models\CMS\CmsArticle', $originalArticle->id);
+ $user = new CmsUser();
+
+ $user->name = 'Doctrine Bot 2.0';
+ $user->username = 'BotDoctrine2';
+ $user->status = 'new';
+
+ $article->setAuthor($user);
+
+ $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalArticle));
+ $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalUser));
+ $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($article));
+ $this->assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user));
+
+ $em->detach($user);
+ $em->detach($article);
+
+ $userMerged = $em->merge($user);
+ $articleMerged = $em->merge($article);
+
+ $this->assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user));
+ $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($article));
+ $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($userMerged));
+ $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($articleMerged));
+
+ $this->assertNotSame($user, $userMerged);
+ $this->assertNotSame($article, $articleMerged);
+ $this->assertNotSame($userMerged, $articleMerged->user);
+ $this->assertSame($user, $articleMerged->user);
+ }
+}
Something went wrong with that request. Please try again.