0

非常に単純なエンティティ:

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()でのみ問題が発生するようです。

何か案が ?

事前に感謝します。

4

1 に答える 1

1

マニュアルで見つけました。

ResultSetMapping#addFieldResult();

最初のパラメーターは、フィールド結果が属するエンティティ結果のエイリアスです。2 番目のパラメーターは、SQL 結果セット内の列の名前です。この名前は大文字と小文字が区別されることに注意してください。つまり、Oracle に対してネイティブ クエリを使用する場合は、すべて大文字にする必要があります。3 番目のパラメーターは、列の値を設定する $alias によって識別されるエンティティ結果のフィールドの名前です。

$rsm->addFieldResult('u', 'TEST', 'username');
$rsm->addFieldResult('u', 'USERID', 'userid');
于 2013-02-28T09:09:50.793 に答える