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