From 318b23097b6a3fe776ba0356bf74a248b69c01ba Mon Sep 17 00:00:00 2001 From: Mathieu De Zutter Date: Wed, 12 Nov 2014 17:03:31 +0100 Subject: [PATCH] Don't load uninitialized proxies after merging. Previous patch avoided initialization of proxies before merging, mainly to fix a bug with merging. However, later on, doctrine tries again to load the proxy. This is unnecessary and thus has been removed. This way, a round trip to the database is saved. --- lib/Doctrine/ORM/UnitOfWork.php | 4 ---- .../Functional/MergeUninitializedProxyTest.php | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index b38074cab..5fe435ec4 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1848,10 +1848,6 @@ class UnitOfWork implements PropertyChangedListener $class->setIdentifierValues($managedCopy, $id); $this->persistNew($class, $managedCopy); - } else { - if ($managedCopy instanceof Proxy && ! $managedCopy->__isInitialized__) { - $managedCopy->__load(); - } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeUninitializedProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeUninitializedProxyTest.php index fbf11d3d4..43981fcc1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeUninitializedProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeUninitializedProxyTest.php @@ -4,6 +4,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Tools\ToolsException; class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase { @@ -43,6 +44,7 @@ class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase $file = $em->find(__NAMESPACE__ . '\MUPFile', $fileId); $picture = unserialize($serializedPicture); + $picture = $em->merge($picture); $this->assertEquals($file, $picture->file, "Unserialized proxy was not merged into managed entity"); @@ -68,6 +70,7 @@ class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase $em->clear(); $file = $em->find(__NAMESPACE__ . '\MUPFile', $fileId); + $picture = $em->merge($picture); $this->assertEquals($file, $picture->file, "Detached proxy was not merged into managed entity"); @@ -98,9 +101,17 @@ class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase $em->clear(); $picture2 = $em->find(__NAMESPACE__ . '\MUPPicture', $picture2Id); + $this->assertFalse($picture->file->__isInitialized()); $picture = unserialize($serializedPicture); + + $this->assertTrue($picture->file instanceof Proxy); + $this->assertFalse($picture->file->__isInitialized()); + $picture = $em->merge($picture); + $this->assertTrue($picture->file instanceof Proxy); + $this->assertFalse($picture->file->__isInitialized(), 'Proxy has been initialized during merge.'); + $this->assertEquals($picture2->file, $picture->file, "Unserialized proxy was not merged into managed proxy"); } @@ -128,8 +139,15 @@ class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase $em->clear(); $picture2 = $em->find(__NAMESPACE__ . '\MUPPicture', $picture2Id); + + $this->assertTrue($picture->file instanceof Proxy); + $this->assertFalse($picture->file->__isInitialized()); + $picture = $em->merge($picture); + $this->assertTrue($picture->file instanceof Proxy); + $this->assertFalse($picture->file->__isInitialized(), 'Proxy has been initialized during merge.'); + $this->assertEquals($picture2->file, $picture->file, "Detached proxy was not merged into managed proxy"); }