我想编写一个涉及使用“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' 列的外键。在查询实体类中,我将状态属性映射如下:
/**
* @var Status
*
* @ManyToOne(targetEntity="Status")
* @JoinColumns({
* @JoinColumn(name="status_id", referencedColumnName="id")
* })
*/
private $status;
以及相关的 get 和 set 方法。
我花了很多时间试图解决这个问题。如果有人能阐明这一点,我们将不胜感激。
最佳答案
您可以像下面这样在任何存储库中编写您的查询,然后您将得到预期的答案。这样你就可以使用 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;
}
}
关于mysql - 如何使用 Doctrine 2 的带连接的 NativeQuery 编写 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731966/