【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2013-04-20
      • 2021-12-13
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多