2013-02-27 63 views
0

一个非常简单的实体:createNativeQuery - OCI8返回空数组

class Users { 
/** 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\Column(type="integer") 
*/ 
protected $userid; 

/** @ORM\Column(type="string") */ 
protected $username; 
}[...] 

,同时试图做一个本地查询

$rsm = new \Doctrine\ORM\Query\ResultSetMapping; 
    $rsm->addEntityResult('Application\Entity\Users', 'u'); 
    $rsm->addFieldResult('u', 'test', 'username'); 
    $rsm->addFieldResult('u', 'userid', 'userid'); 
    $q = $objectManager->createNativeQuery('SELECT u.username as test, u.userid from users u where u.userid=17',$rsm); 
    $result = $result->getResult(); 

$结果返回与甲骨文(OCI8驱动程序和PDO)一个空数组。使用MySQL,一切正常。 Oracle和MySQL之间的数据库完全相同,即相同的表,相同的列。

表'用户'不是空的,因为当使用DQL时,它工作。当使用本地查询使用addRootEntityFromClassMetadata()时,也会起作用。

看来只有oci8 + addEntityResult()才会出现问题。

有什么想法?

提前致谢。

回答

1

在手册中找到它。

ResultSetMapping#addFieldResult();

第一个参数是字段结果所属的实体结果的别名。第二个参数是SQL结果集中列的名称。请注意,如果您使用针对Oracle的本机查询,则该名称区分大小写,即它必须全部大写。第三个参数是由$ alias标识的实体结果上的字段的名称,该值应该设置为该列的值。

$rsm->addFieldResult('u', 'TEST', 'username'); 
$rsm->addFieldResult('u', 'USERID', 'userid');