【问题标题】:Doctrine querybuilder/DQL to check if an m2m collection on entity is a subset of an arrayDoctrine querybuilder/DQL 检查实体上的 m2m 集合是否是数组的子集
【发布时间】:2016-03-02 20:31:13
【问题描述】:
我有一个 Page 实体,它与 Permission 实体具有多对多关系。
我还有一个 User 实体,它也与 Permission 实体具有多对多关系。
使用 Doctrine 的 Querybuilder 或 DQL 我想获取所有页面,其中该页面的权限集合是一个用户权限的子集。我该怎么做?
我使用过 Querybuilder 的 expr()->in 和 DQL 的 MEMBER OF,但这些仅适用于“多分之一”。
【问题讨论】:
标签:
doctrine-orm
doctrine
many-to-many
query-builder
dql
【解决方案1】:
您的实体代码将有助于获取正确的属性名称,但是,您可以在 DQL 中执行以下操作:
SELECT page
FROM Page page
INNER JOIN page.permissions permission
INNER JOIN permission.user user
WHERE IDENTITY(user) = :userId
由于两个内连接,您将只能获得与 WHERE 子句中指定的用户相关联的权限的页面。
您也可以使用附加的连接条件而不是 where 子句来做到这一点。它们会导致相同的结果:
SELECT page
FROM Page page
INNER JOIN page.permissions permission
INNER JOIN permission.user user WITH IDENTITY(user) = :userId