Doctrine querybuilder/DQL 检查实体上的 m2m 集合是否是数组的子集
Doctrine querybuilder/DQL to check if an m2m collection on entity is a subset of an array
我有一个 Page 实体,它与 Permission 实体存在多对多关系。
我还有一个 User 实体,它也与 Permission 实体存在多对多关系。
使用 Doctrine 的 Querybuilder 或 DQL 我想获取所有页面,其中该页面的权限集合是一个用户权限的子集。我该怎么做?
我使用了 Querybuilder 的 expr()->in
和 DQL 的 MEMBER OF
,但这些仅适用于 "one in many"。
您的实体代码将有助于获得正确的属性名称,但是,您可以在 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
我有一个 Page 实体,它与 Permission 实体存在多对多关系。
我还有一个 User 实体,它也与 Permission 实体存在多对多关系。
使用 Doctrine 的 Querybuilder 或 DQL 我想获取所有页面,其中该页面的权限集合是一个用户权限的子集。我该怎么做?
我使用了 Querybuilder 的 expr()->in
和 DQL 的 MEMBER OF
,但这些仅适用于 "one in many"。
您的实体代码将有助于获得正确的属性名称,但是,您可以在 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