2016-01-07 115 views
0

有人可以在querybuilder中爲我轉換這個查詢嗎?在Doctrine2中爲Symfony2提供的querybuilder連接查詢

SELECT m.id,n.unitid 
    FROM mappaths m JOIN unitids n on (m.id=n.id) where n.databaseid=1 

我使用此查詢,但它給我的mm.unitid所有的值,而我的要求是讓下面由test=1可變

$query=$qb->select('mm.unitid') 
     ->from('ApiMapBundle:Mappaths','m') 
     ->from('ApiMapBundle:Unitids','mm') 
    // ->leftJoin('m','u') 
     ->leftJoin('m.refUnitids1','u','WITH','m.id = u') 
    // ->leftJoin('m.refUnitids2','v') 
     ->where('m.id=:test') 
     ->setParameter('test',1) 
     ->getQuery()->getResult(); 
+0

? – Isky

回答

1

嘗試定義只有一個值:

$query = $qb->select('mm.unitid') 
     ->from('ApiMapBundle:Mappaths','m') 
     ->innerJoin('m.refUnitids1','mm','WITH','m.id = mm.FIELD') //you need to specify on which field of mm join should be done 
     ->where('m.id=:test') 
     ->setParameter('test',1) 
     ->getQuery() 
     ->getResult(); 

您需要指定Unitids的字段,該字段應該用於加入Mappaths。最好的辦法是在Entity定義中定義這個關係,然後你可以只使用->innerJoin('m.refUnitids1','mm')而不需要額外的連接參數。

而且,在這種情況下,最好是你爲什麼要使用的QueryBuilder來leftJoin使用innerJoin代替leftJoin

+0

Tomasz感謝您的回覆。還有一個問題,如果我們有兩個外鍵然後如何在這種情況下的查詢,例如像這樣的查詢sql = select * FROM mappaths m JOIN unitids n on(m.ref_unitids2 = n.id or m.ref_unitids1 = n.id)其中m.id = 2 – zahid

+0

我已經在meta文件中定義了這些forign--主要關係。基本上這個mappaths表(類)包含兩個(多對一)關係到單元表。或上課.. – zahid

相關問題