「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 メソッドとともに。
私はこれを理解しようとするのにかなりの時間を費やしました。誰かがこれに光を当てることができれば感謝します。