1

「UNION」(DQL ではサポートされていません) を使用するクエリを作成したいので、Doctrine 2 の NativeQuery を使用して MySQL クエリを作成しようとしています。私は Doctrine のドキュメントを使用しています。

これまでのところ、私のコードは次のもので構成されています。

$rsm = new ResultSetMapping();
$rsm->addEntityResult('\Entities\Query', 'q');
$rsm->addFieldResult('q', 'id', 'id');
$rsm->addFieldResult('q', 'title', 'title');
$rsm->addFieldResult('q', 'deadline', 'deadline');

$query = $this->_em->createNativeQuery('SELECT query.id, query.title, query.deadline FROM query', $rsm);
$aQuery = $query->getResult();

$aQuery = $query->getResult();

foreach($aQuery as $o){
    echo '<p>';
    echo 'id: '.$o->getId().'<br/>';
    echo 'title: '.$o->getTitle().'<br/>';
    echo 'deadline: '.$o->getDeadline()->getTimestamp().'<br/>';  
    echo '</p>';die;
}

これにより、期待される結果が返されます。ただし、クエリに 2 番目のテーブル/エンティティを導入しようとすると、問題が発生します。

$rsm->addJoinedEntityResult('\Entities\Status', 's', 'q', 'status');
$rsm->addFieldResult('s', 'id', 'id', '\Entities\Status');

これらの行は次のメッセージをスローしますNotice: Undefined index: id。これがなぜなのかわかりません。

クエリ テーブルには、「status」テーブルの「id」列を参照する外部キーである「status_id」列があります。クエリ エンティティ クラスでは、ステータス プロパティを次のようにマップしました。

/**
 * @var Status
 *
 * @ManyToOne(targetEntity="Status")
 * @JoinColumns({
 *   @JoinColumn(name="status_id", referencedColumnName="id")
 * })
 */
private $status;

関連する get および set メソッドとともに。

私はこれを理解しようとするのにかなりの時間を費やしました。誰かがこれに光を当てることができれば感謝します。

4

1 に答える 1

1

以下のように任意のリポジトリにクエリを記述すると、期待どおりの結果が得られます。このようにして、MySQL の任意の SQL 関数を使用します

public function yourFunction()
    {

        $em    = $this->getEntityManager()->getConnection();
        $sql = "YOUR DESIRE SQL"; // like SELECT * FROM users

        try {
            return $em->query($sql)->fetchAll();
        } catch (\Doctrine\ORM\NoResultException $e) {
            return null;
        }
    }
于 2014-02-13T09:42:24.233 に答える