2014-02-12 67 views
1

我想編寫一個涉及'UNION'(不支持DQL)的查詢,因此我正在嘗試使用Doctrine 2的NativeQuery編寫MySQL查詢。我一直在使用Doctrine的documentation如何使用Doctrine 2的NativeQuery和連接編寫SQL查詢?

到目前爲止我的代碼包括:

$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 message.I想不通這是爲什麼。

查詢表有一個'status_id'列,它是引用'status'表的'id'列的外鍵。

/** 
* @var Status 
* 
* @ManyToOne(targetEntity="Status") 
* @JoinColumns({ 
* @JoinColumn(name="status_id", referencedColumnName="id") 
* }) 
*/ 
private $status; 

隨着相關get和set方法:在查詢的實體類我如下映射了狀態屬性。

我花了相當長的一段時間試圖弄清楚這一點。欣賞它,如果有人能夠闡明這一點。

回答

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; 
     } 
    } 
+0

是的,現在考慮這種方法。但是使用Doctrine的原生查詢的好處是結果被映射到實體對象上。 – Sid

相關問題