1
我想編寫一個涉及'UNION'(不支持DQL)的查詢,因此我正在嘗試使用Doctrine 2的NativeQuery編寫MySQL查詢。我一直在使用Doctrine的documentation。如何使用Doctrine 2的NativeQuery和連接編寫SQL查詢?
到目前爲止我的代碼包括:
$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;
}
這將返回預期的結果。但是,我遇到問題時,我嘗試在查詢中引入第二個表/實體:
$rsm->addJoinedEntityResult('\Entities\Status', 's', 'q', 'status');
$rsm->addFieldResult('s', 'id', 'id', '\Entities\Status');
那些行拋出:Notice: Undefined index: id
message.I想不通這是爲什麼。
查詢表有一個'status_id'列,它是引用'status'表的'id'列的外鍵。
/**
* @var Status
*
* @ManyToOne(targetEntity="Status")
* @JoinColumns({
* @JoinColumn(name="status_id", referencedColumnName="id")
* })
*/
private $status;
隨着相關get和set方法:在查詢的實體類我如下映射了狀態屬性。
我花了相當長的一段時間試圖弄清楚這一點。欣賞它,如果有人能夠闡明這一點。
是的,現在考慮這種方法。但是使用Doctrine的原生查詢的好處是結果被映射到實體對象上。 – Sid