2012-11-30 68 views
4

我讀過關於原生sql查詢的Doctrine2文檔。 它沒有討論通過ManyToMany關係連接的實體。 我沒有想到如何處理這個,任何想法或例子。Doctrine2原生查詢ManyToMany

回答

2

您只需手動將連接表添加到sql。在擴展教義手冊CHPT 14例如:

$rsm = new ResultSetMapping; 
$rsm->addEntityResult('User', 'u'); 
$rsm->addFieldResult('u', 'id', 'id'); 
$rsm->addFieldResult('u', 'name', 'name'); 
$rsm->addJoinedEntityResult('Address' , 'a', 'u', 'address'); 
$rsm->addFieldResult('a', 'address_id', 'id'); 
$rsm->addFieldResult('a', 'street', 'street'); 
$rsm->addFieldResult('a', 'city', 'city'); 

$sql = 'SELECT u.id, u.name, a.id AS address_id, a.street, a.city FROM users u ' . 
     'INNER JOIN address__user j ON u.id = j.user '. 
     'INNER JOIN address a ON a.id = j.address '. 
     'WHERE u.name = ?'; 
$query = $this->_em->createNativeQuery($sql, $rsm); 
$query->setParameter(1, 'romanb'); 

$users = $query->getResult(); 

這個例子假設你的連接表的字段處理和用戶爲它的鍵。

+0

只是簡單,比你 – loicb

+0

@Lighthart在你的查詢中有一個問題。你爲多個表使用'j'別名。你爲什麼在連接之間使用'AND'? – hardik

+0

固定。由於這已經超過一年了,我認爲OP簡單地在他自己的代碼中修正了模擬。 – Lighthart