test scalar result
This commit is contained in:
parent
f813223036
commit
0cc2583a02
@ -170,6 +170,9 @@ class ResultSetMappingBuilder extends ResultSetMapping
|
|||||||
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
|
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if(!isset($classMetadata->fieldMappings[$fieldName])) {
|
||||||
|
throw new \InvalidArgumentException("Entity '".$classMetadata->name."' has no field '".$fieldName."'. ");
|
||||||
|
}
|
||||||
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
|
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,20 +18,25 @@ use Doctrine\Common\Collections\ArrayCollection;
|
|||||||
* query = "SELECT id, username FROM cms_users WHERE username = ?"
|
* query = "SELECT id, username FROM cms_users WHERE username = ?"
|
||||||
* ),
|
* ),
|
||||||
* @NamedNativeQuery(
|
* @NamedNativeQuery(
|
||||||
* name = "fetchAllColumnsWithResultClass",
|
* name = "fetchAllColumns",
|
||||||
* resultClass = "CmsUser",
|
* resultClass = "CmsUser",
|
||||||
* query = "SELECT * FROM cms_users WHERE username = ?"
|
* query = "SELECT * FROM cms_users WHERE username = ?"
|
||||||
* ),
|
* ),
|
||||||
* @NamedNativeQuery(
|
* @NamedNativeQuery(
|
||||||
* name = "fetchJoinedAddressWithResultSetMapping",
|
* name = "fetchJoinedAddress",
|
||||||
* resultSetMapping= "mappingJoinedAddress",
|
* resultSetMapping= "mappingJoinedAddress",
|
||||||
* query = "SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?"
|
* query = "SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?"
|
||||||
* ),
|
* ),
|
||||||
* @NamedNativeQuery(
|
* @NamedNativeQuery(
|
||||||
* name = "fetchJoinedPhonenumberWithResultSetMapping",
|
* name = "fetchJoinedPhonenumber",
|
||||||
* resultSetMapping= "mappingJoinedPhonenumber",
|
* resultSetMapping= "mappingJoinedPhonenumber",
|
||||||
* query = "SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?"
|
* query = "SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?"
|
||||||
* ),
|
* ),
|
||||||
|
* @NamedNativeQuery(
|
||||||
|
* name = "fetchUserPhonenumberCount",
|
||||||
|
* resultSetMapping= "mappingUserPhonenumberCount",
|
||||||
|
* query = "SELECT id, name, status, COUNT(phonenumber) AS numPhones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY status, user_id ORDER BY username"
|
||||||
|
* ),
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @SqlResultSetMappings({
|
* @SqlResultSetMappings({
|
||||||
@ -58,12 +63,28 @@ use Doctrine\Common\Collections\ArrayCollection;
|
|||||||
* @EntityResult(
|
* @EntityResult(
|
||||||
* entityClass = "CmsUser",
|
* entityClass = "CmsUser",
|
||||||
* fields = {
|
* fields = {
|
||||||
|
* @FieldResult("id"),
|
||||||
|
* @FieldResult("name"),
|
||||||
|
* @FieldResult("status"),
|
||||||
|
* @FieldResult("phonenumbers.phonenumber" , column = "number"),
|
||||||
|
* }
|
||||||
|
* )
|
||||||
|
* }
|
||||||
|
* ),
|
||||||
|
* @SqlResultSetMapping(
|
||||||
|
* name = "mappingUserPhonenumberCount",
|
||||||
|
* entities= {
|
||||||
|
* @EntityResult(
|
||||||
|
* entityClass = "CmsUser",
|
||||||
|
* fields = {
|
||||||
* @FieldResult(name = "id"),
|
* @FieldResult(name = "id"),
|
||||||
* @FieldResult(name = "name"),
|
* @FieldResult(name = "name"),
|
||||||
* @FieldResult(name = "status"),
|
* @FieldResult(name = "status"),
|
||||||
* @FieldResult(name = "phonenumbers.phonenumber" , column = "number"),
|
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
|
* },
|
||||||
|
* columns = {
|
||||||
|
* @ColumnResult("numPhones")
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
* })
|
* })
|
||||||
|
@ -372,8 +372,6 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
*/
|
*/
|
||||||
public function testBasicNativeNamedQueryWithResultClass()
|
public function testBasicNativeNamedQueryWithResultClass()
|
||||||
{
|
{
|
||||||
//$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
|
|
||||||
|
|
||||||
$user = new CmsUser;
|
$user = new CmsUser;
|
||||||
$user->name = 'Fabio B. Silva';
|
$user->name = 'Fabio B. Silva';
|
||||||
$user->username = 'FabioBatSilva';
|
$user->username = 'FabioBatSilva';
|
||||||
@ -406,7 +404,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->_em->clear();
|
$this->_em->clear();
|
||||||
|
|
||||||
|
|
||||||
$result = $repository->createNativeNamedQuery('fetchAllColumnsWithResultClass')
|
$result = $repository->createNativeNamedQuery('fetchAllColumns')
|
||||||
->setParameter(1, 'FabioBatSilva')->getResult();
|
->setParameter(1, 'FabioBatSilva')->getResult();
|
||||||
|
|
||||||
$this->assertEquals(1, count($result));
|
$this->assertEquals(1, count($result));
|
||||||
@ -419,6 +417,9 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1663
|
||||||
|
*/
|
||||||
public function testJoinedOneToOneNativeNamedQueryWithResultSetMapping()
|
public function testJoinedOneToOneNativeNamedQueryWithResultSetMapping()
|
||||||
{
|
{
|
||||||
$user = new CmsUser;
|
$user = new CmsUser;
|
||||||
@ -442,7 +443,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
|
$repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
|
||||||
|
|
||||||
|
|
||||||
$result = $repository->createNativeNamedQuery('fetchJoinedAddressWithResultSetMapping')
|
$result = $repository->createNativeNamedQuery('fetchJoinedAddress')
|
||||||
->setParameter(1, 'FabioBatSilva')->getResult();
|
->setParameter(1, 'FabioBatSilva')->getResult();
|
||||||
|
|
||||||
$this->assertEquals(1, count($result));
|
$this->assertEquals(1, count($result));
|
||||||
@ -457,7 +458,9 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertEquals('São Paulo', $result[0]->getAddress()->getCity());
|
$this->assertEquals('São Paulo', $result[0]->getAddress()->getCity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1663
|
||||||
|
*/
|
||||||
public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping()
|
public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping()
|
||||||
{
|
{
|
||||||
$user = new CmsUser;
|
$user = new CmsUser;
|
||||||
@ -477,7 +480,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
|
|
||||||
$repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
|
$repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
|
||||||
|
|
||||||
$result = $repository->createNativeNamedQuery('fetchJoinedPhonenumberWithResultSetMapping')
|
$result = $repository->createNativeNamedQuery('fetchJoinedPhonenumber')
|
||||||
->setParameter(1, 'FabioBatSilva')->getResult();
|
->setParameter(1, 'FabioBatSilva')->getResult();
|
||||||
|
|
||||||
$this->assertEquals(1, count($result));
|
$this->assertEquals(1, count($result));
|
||||||
@ -491,7 +494,56 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertTrue($phones[0]->getUser() === $result[0]);
|
$this->assertTrue($phones[0]->getUser() === $result[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1663
|
||||||
|
*/
|
||||||
|
public function testMixedNativeNamedQueryNormalJoin()
|
||||||
|
{
|
||||||
|
$user1 = new CmsUser;
|
||||||
|
$user1->name = 'Fabio B. Silva';
|
||||||
|
$user1->username = 'FabioBatSilva';
|
||||||
|
$user1->status = 'dev';
|
||||||
|
|
||||||
|
$user2 = new CmsUser;
|
||||||
|
$user2->name = 'test tester';
|
||||||
|
$user2->username = 'test';
|
||||||
|
$user2->status = 'tester';
|
||||||
|
|
||||||
|
$phone1 = new CmsPhonenumber;
|
||||||
|
$phone2 = new CmsPhonenumber;
|
||||||
|
$phone3 = new CmsPhonenumber;
|
||||||
|
$phone1->phonenumber = 11111111;
|
||||||
|
$phone2->phonenumber = 22222222;
|
||||||
|
$phone3->phonenumber = 33333333;
|
||||||
|
|
||||||
}
|
$user1->addPhonenumber($phone1);
|
||||||
|
$user1->addPhonenumber($phone2);
|
||||||
|
$user2->addPhonenumber($phone3);
|
||||||
|
|
||||||
|
$this->_em->persist($user1);
|
||||||
|
$this->_em->persist($user2);
|
||||||
|
$this->_em->flush();
|
||||||
|
|
||||||
|
$this->_em->clear();
|
||||||
|
|
||||||
|
$repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
|
||||||
|
|
||||||
|
$result = $repository->createNativeNamedQuery('fetchUserPhonenumberCount')
|
||||||
|
->setParameter(1, array('test','FabioBatSilva'))->getResult();
|
||||||
|
|
||||||
|
$this->assertEquals(2, count($result));
|
||||||
|
$this->assertTrue(is_array($result[0]));
|
||||||
|
$this->assertTrue(is_array($result[1]));
|
||||||
|
|
||||||
|
// first user => 2 phonenumbers
|
||||||
|
$this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][0]);
|
||||||
|
$this->assertEquals('Fabio B. Silva', $result[0][0]->name);
|
||||||
|
$this->assertEquals(2, $result[0]['numPhones']);
|
||||||
|
|
||||||
|
// second user => 1 phonenumbers
|
||||||
|
$this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[1][0]);
|
||||||
|
$this->assertEquals('test tester', $result[1][0]->name);
|
||||||
|
$this->assertEquals(1, $result[1]['numPhones']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user