在一个非常简单的实体上:
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()。
有什么想法吗?
先谢谢。
答案 0 :(得分:1)
在手册中找到它。
ResultSetMapping#addFieldResult();
第一个参数是字段结果所属的实体结果的别名。第二个参数是SQL结果集中列的名称。请注意,此名称区分大小写,即如果对Oracle使用本机查询,则必须全部为大写。第三个参数是$ alias标识的实体结果上的字段名称,应该在其中设置列的值。
$rsm->addFieldResult('u', 'TEST', 'username');
$rsm->addFieldResult('u', 'USERID', 'userid');