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)
;
我在 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)
;