如何使用Doctrine 2的NativeQuery和连接编写SQL查询?

时间:2014-02-12 15:20:22

标签: mysql sql doctrine-orm inner-join nativequery

我想编写一个涉及使用'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方法一起使用。

我花了很多时间试图解决这个问题。如果有人能够对此有所了解,请欣赏它。

1 个答案:

答案 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;
        }
    }