From 5d81e867be414199d78f99668b0329099ad2f3a4 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sun, 15 May 2011 23:16:44 +0200 Subject: [PATCH] Add some logic to keep backwards compatibility in QueryBuilder --- lib/Doctrine/ORM/QueryBuilder.php | 20 +++++++++++++++++++ tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index c0df0e4c2..10eaebbe2 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -410,6 +410,20 @@ class QueryBuilder public function add($dqlPartName, $dqlPart, $append = false) { $isMultiple = is_array($this->_dqlParts[$dqlPartName]); + + // This is introduced for backwards compatibility reasons. + // TODO: Remove for 3.0 + if ($dqlPartName == 'join') { + $newDqlPart = array(); + foreach ($dqlPart AS $k => $v) { + if (is_numeric($k)) { + $newDqlPart[$this->getRootAlias()] = $v; + } else { + $newDqlPart[$k] = $v; + } + } + $dqlPart = $newDqlPart; + } if ($append && $isMultiple) { if (is_array($dqlPart)) { @@ -602,6 +616,9 @@ class QueryBuilder public function innerJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $rootAlias = substr($join, 0, strpos($join, '.')); + if (!in_array($rootAlias, $this->getRootAliases())) { + $rootAlias = $this->getRootAlias(); + } return $this->add('join', array( $rootAlias => new Expr\Join(Expr\Join::INNER_JOIN, $join, $alias, $conditionType, $condition, $indexBy) @@ -632,6 +649,9 @@ class QueryBuilder public function leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $rootAlias = substr($join, 0, strpos($join, '.')); + if (!in_array($rootAlias, $this->getRootAliases())) { + $rootAlias = $this->getRootAlias(); + } return $this->add('join', array( $rootAlias => new Expr\Join(Expr\Join::LEFT_JOIN, $join, $alias, $conditionType, $condition, $indexBy) diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index b44f8578a..cf570f52c 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -662,4 +662,14 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals(array('u', 'u2'), $qb->getRootAliases()); $this->assertEquals('u', $qb->getRootAlias()); } + + public function testBCAddJoinWithoutRootAlias() + { + $qb = $this->_em->createQueryBuilder() + ->select('u') + ->from('Doctrine\Tests\Models\CMS\CmsUser', 'u') + ->add('join', array('INNER JOIN u.groups g'), true); + + $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.groups g', $qb->getDQL()); + } } \ No newline at end of file