1

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

我花了很长时间试图弄清楚这一点。如果有人可以对此有所了解,请不胜感激。

4

1 回答 1

1

您可以在任何存储库中编写查询,如下所示,然后您将获得预期的答案。这样你就可以使用 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;
        }
    }
于 2014-02-13T09:42:24.233 回答