sql - 具有 ManyToMany 关系的 Doctrine NOT EXIST 条件

标签 sql symfony doctrine-orm

我有 2 个具有多对多关系的实体,如下所示:

User 
{
    /**
     * @var Group[]
     *
     * @ORM\ManyToMany(targetEntity="Group", inversedBy="users")
     * @ORM\JoinTable(
     *  name="user_group",
     *  joinColumns={
     *      @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *  },
     *  inverseJoinColumns={
     *      @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     *  }
     * )
     */
    protect $groups
}

Group
{
    /**
     * @var User[]
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="groups")
     */
    private $users;
}

这会在数据库上创建 3 个表:

  • 用户
  • 用户组

是否可以在 DQL 中操作 user_group?我正在尝试这样的事情:

SELECT *
FROM user u
WHERE EXISTS
(SELECT ug.user_id FROM user_group ug WHERE ug.user_id = u.id AND ug.group_id = 3)

这行不通,因为它应该写成实体。我可以使用 Native SQL 运行它,但我想确保没有更好的解决方案

最佳答案

Jonathan Martinez 的解决方案有效,但我发现这更简单(特别是因为我也可以使用 NOT MEMBER OF):

$query = $em->createQuery('SELECT u.id FROM User u WHERE :groupId MEMBER OF u.groups');
$query->setParameter('groupId', $group);

更多相关信息,请点击此处:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples

关于sql - 具有 ManyToMany 关系的 Doctrine NOT EXIST 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040587/

相关文章:

php - 服务中的许多依赖项

zend-framework - 保存doctrine2实体以进行缓存以加快页面加载

Symfony2 : How to filter the options of an entity-choice form field by a certain attribute?

sql - 为什么 SQL_PROFILE 不显示建议?

php - SQL根据另一个列值得到不同的列结果

mysql - UPDATE 和 MIN SQL 查询

symfony - 根据用户的区域设置包含带有变量的模板

configuration - 如何使用symfony2访问 Controller 中的语义配置?

php - Symfony 5 - make :entity 仅支持属性映射

sql - 在sys.servers中找不到服务器 'dbo'。