2017-05-11 44 views
0

我在Room和Rights實體之間有ManyToMany關係。學說自動創建了第三個「room_rights」表。權利是分層的,我使用物化路徑方法將它們存儲在數據庫中,因此「權限」表具有「路徑」字段。SQL到Doctrine的QueryBuilder轉換

我希望獲得擁有像我提供的參數一樣的路徑的權利的房間。我可以用SQL查詢:

select ro.* 
from 
    rooms as ro, 
    room_rights as rr, 
    rights as ri 
where 
    rr.rights_id = ri.id and 
    rr.room_id = ro.id and 
    ( 
     ri.path like '99,%' OR 
     ri.path like '100,102,%' 
    ) 

並且在我運行在數據庫上時這個工作。現在,我必須使用Doctrine的QueryBuilder,但我不知道如何在有連接表時做到這一點。你能幫忙嗎?

回答

0

因此,今天重新開始,我設法解決了這個問題。 原來QueryBuilder表達式很簡單:

$filter = "(ri.path like '99,%' OR ri.path like '100,102,%')"; // of course in-app it is constructed dynamically 

$em->createQueryBuilder() 
    ->select('ro') 
    ->from('AppBundle\Entity\Room', 'ro') 
    ->innerJoin('ro.rights', 'ri', 'WITH', $filter) 
; 
+0

我不會自我接受我的回答一段時間。如果有人有更好/更高性能的解決方案,請發佈。 – Forseti

相關問題