SQL 到 Doctrine 的 QueryBuilder 转换

SQL to Doctrine's QueryBuilder conversion

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

我想要获得具有与我作为参数提供的路径相同的 Rights 的 Rooms。我可以用 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 来实现它,但是我不知道在加入 table 时该怎么做。你能帮忙吗?

所以,今天重新开始,我设法解决了这个问题。 事实证明 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)
;