2013-02-27 62 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');