From 4a6afb46e2b85eaee362678acfe3dba8b9ecd95a Mon Sep 17 00:00:00 2001 From: Dries De Peuter Date: Sun, 1 Feb 2015 23:13:32 +0100 Subject: [PATCH] Fix join when recreation of query from parts. --- lib/Doctrine/ORM/QueryBuilder.php | 8 ++++++- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index f3cad510d..bb08514eb 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -690,7 +690,13 @@ class QueryBuilder ); } - $isMultiple = is_array($this->_dqlParts[$dqlPartName]); + $isMultiple = is_array($this->_dqlParts[$dqlPartName]) + && !($dqlPartName == 'join' && !$append); + + // Allow adding any part retrieved from self::getDQLParts(). + if (is_array($dqlPart) && $dqlPartName != 'join') { + $dqlPart = reset($dqlPart); + } // This is introduced for backwards compatibility reasons. // TODO: Remove for 3.0 diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index c10177942..d523f6f49 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -1098,4 +1098,26 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals('foo_reg', $query->getCacheRegion()); $this->assertEquals(Cache::MODE_REFRESH, $query->getCacheMode()); } + + /** + * @group DDC-2253 + */ + public function testRebuildsFromParts() + { + $qb = $this->_em->createQueryBuilder() + ->select('u') + ->from('Doctrine\Tests\Models\CMS\CmsUser', 'u') + ->join('u.article', 'a'); + + $dqlParts = $qb->getDQLParts(); + $dql = $qb->getDQL(); + + $qb2 = $this->_em->createQueryBuilder(); + foreach (array_filter($dqlParts) as $name => $part) { + $qb2->add($name, $part); + } + $dql2 = $qb2->getDQL(); + + $this->assertEquals($dql, $dql2); + } }