我想编写一个涉及使用“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;
}
这将返回预期的结果。但是,当我尝试在查询中引入第二个表/实体时遇到问题:
$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 方法。
我花了很长时间试图弄清楚这一点。如果有人可以对此有所了解,请不胜感激。