diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 0cb037131..d7554b903 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -272,8 +272,6 @@ abstract class AbstractHydrator $rowData['newObjects'][$objIndex]['class'] = $cacheKeyInfo['class']; $rowData['newObjects'][$objIndex]['args'][$argIndex] = $value; - - $rowData['scalars'][$fieldName] = $value; break; case (isset($cacheKeyInfo['isScalar'])): diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index 507fd7025..f3e4376f7 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -246,14 +246,14 @@ class ArrayHydrator extends AbstractHydrator $resultKey = $this->_resultCounter - 1; } - $count = count($rowData['newObjects']); + $scalarCount = (isset($rowData['scalars'])? count($rowData['scalars']): 0); foreach ($rowData['newObjects'] as $objIndex => $newObject) { $class = $newObject['class']; $args = $newObject['args']; $obj = $class->newInstanceArgs($args); - if ($count === 1) { + if (count($args) == $scalarCount || ($scalarCount == 0 && count($rowData['newObjects']) == 1)) { $result[$resultKey] = $obj; continue; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index ab6ac59cf..e0024bb7c 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -554,14 +554,15 @@ class ObjectHydrator extends AbstractHydrator $resultKey = $this->resultCounter - 1; } - $count = count($rowData['newObjects']); + + $scalarCount = (isset($rowData['scalars'])? count($rowData['scalars']): 0); foreach ($rowData['newObjects'] as $objIndex => $newObject) { $class = $newObject['class']; $args = $newObject['args']; $obj = $class->newInstanceArgs($args); - if ($count === 1) { + if ($scalarCount == 0 && count($rowData['newObjects']) == 1 ) { $result[$resultKey] = $obj; continue; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index c24fa40cc..486d4af62 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1353,7 +1353,7 @@ class SqlWalker implements TreeWalker break; case ($expr instanceof AST\NewObjectExpression): - $sql .= $this->walkNewObject($expr); + $sql .= $this->walkNewObject($expr,$selectExpression->fieldIdentificationVariable); break; default: @@ -1519,10 +1519,10 @@ class SqlWalker implements TreeWalker * * @return string The SQL. */ - public function walkNewObject($newObjectExpression) + public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) { $sqlSelectExpressions = array(); - $objIndex = $this->newObjectCounter++; + $objIndex = $newObjectResultAlias?:$this->newObjectCounter++; foreach ($newObjectExpression->args as $argIndex => $e) { $resultAlias = $this->scalarResultCounter++; diff --git a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php index 63cc89bac..e8c0e300f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php @@ -138,6 +138,49 @@ class NewOperatorTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); } + /** + * @dataProvider provideDataForHydrationMode + */ + public function testShouldIgnoreAliasesForSingleObject($hydrationMode) + { + $dql = " + SELECT + new Doctrine\Tests\Models\CMS\CmsUserDTO( + u.name, + e.email, + a.city + ) as cmsUser + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult($hydrationMode); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]); + + $this->assertEquals($this->fixtures[0]->name, $result[0]->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + + $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); + $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); + $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + } + public function testShouldAssumeFromEntityNamespaceWhenNotGiven() { $dql = " @@ -540,6 +583,467 @@ class NewOperatorTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); } + public function testShouldSupportMultipleNewOperatorsWithAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ) as cmsAddress + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2]['cmsAddress']); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + } + + public function testShouldSupportMultipleNewOperatorsWithAndWithoutAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ) + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2][0]); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + } + + public function testShouldSupportMultipleNewOperatorsAndSingleScalar() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ), + new CmsAddressDTO( + a.country, + a.city + ), + u.status + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2][0]); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0][1]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1][1]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2][1]); + + $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name); + $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name); + $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + } + + public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ) as cmsAddress, + u.status as cmsUserStatus + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2]['cmsAddress']); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); + } + + public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAndWithoutAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ), + u.status + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2][0]); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + } + + public function testShouldSupportMultipleNewOperatorsAndMultipleScalars() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ), + new CmsAddressDTO( + a.country, + a.city + ), + u.status, + u.username + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2][0]); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0][1]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1][1]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2][1]); + + $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name); + $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name); + $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + + $this->assertEquals($this->fixtures[0]->username,$result[0]['username']); + $this->assertEquals($this->fixtures[1]->username,$result[1]['username']); + $this->assertEquals($this->fixtures[2]->username,$result[2]['username']); + } + + public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ) as cmsAddress, + u.status as cmsUserStatus, + u.username as cmsUserUsername + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1]['cmsAddress']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2]['cmsAddress']); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); + + $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); + $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); + $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); + } + + public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWithoutAliases() + { + $dql = " + SELECT + new CmsUserDTO( + u.name, + e.email + ) as cmsUser, + new CmsAddressDTO( + a.country, + a.city + ), + u.status, + u.username as cmsUserUsername + FROM + Doctrine\Tests\Models\CMS\CmsUser u + JOIN + u.email e + JOIN + u.address a + ORDER BY + u.name"; + + $query = $this->_em->createQuery($dql); + $result = $query->getResult(); + + $this->assertCount(3, $result); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[0]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[1]['cmsUser']); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUserDTO', $result[2]['cmsUser']); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[0][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[1][0]); + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddressDTO', $result[2][0]); + + $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + + $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + + + $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + + $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + + $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); + $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); + $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + + $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); + $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); + $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); + } + /** * @expectedException Doctrine\ORM\Query\QueryException * @expectedExceptionMessage [Semantical Error] line 0, col 11 near '\InvalidClass(u.name)': Error: Class "\InvalidClass" is not defined.