我在房间和权限实体之间有多对多关系。教义自动创建了第三个"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 来制作它,但我不知道当有连接表时该怎么做。你能帮忙吗?
所以,今天重新开始,我设法解决了这个问题。事实证明,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('AppBundleEntityRoom', 'ro')
->innerJoin('ro.rights', 'ri', 'WITH', $filter)
;