0

我在 Room 和 Rights 实体之间有 ManyToMany 关系。Doctrine 自动创建了第三个“room_rights”表。权限是分层的,我使用物化路径方法将它们存储在数据库中,因此“权限”表具有“路径”字段。

我想获得具有路径的房间,就像我作为参数提供的路径一样。我可以用 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 来制作它,但是当有连接表时我不知道该怎么做。你能帮忙吗?

4

1 回答 1

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)
;
于 2017-05-12T07:37:03.780 回答