createNativeQuery - oci8返回空数组

时间:2013-02-27 22:01:57

标签: doctrine-orm zend-framework-modules

在一个非常简单的实体上:

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();

$ result返回一个带有oracle(oci8驱动程序和pdo)的空数组。 有了MySQL,一切都还可以。 Oracle和MySQL之间的数据库完全相同,相同的表,相同的列。

表'users'不为空,因为使用DQL时,它可以正常工作。当使用带有本机查询的addRootEntityFromClassMetadata()时也可以使用。

似乎问题只发生在oci8 + addEntityResult()。

有什么想法吗?

先谢谢。

1 个答案:

答案 0 :(得分:1)

在手册中找到它。

ResultSetMapping#addFieldResult();

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

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