我想编写一个涉及使用'UNION'(DQL不支持)的查询,因此我尝试使用Doctrine 2的NativeQuery编写MySQL查询。我一直在使用Doctrine的documentation。
到目前为止,我的代码包括:
$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'列的外键。在查询实体类中,我已经映射了status属性,如下所示:
/**
* @var Status
*
* @ManyToOne(targetEntity="Status")
* @JoinColumns({
* @JoinColumn(name="status_id", referencedColumnName="id")
* })
*/
private $status;
与相关的get和set方法一起使用。
我花了很多时间试图解决这个问题。如果有人能够对此有所了解,请欣赏它。
答案 0 :(得分:1)
您可以在任何存储库中编写您的查询,然后您将得到预期的ans。这样就可以使用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;
}
}