我有用户和角色的多对多关系。也就是说,我有用户表和实体类、角色表和实体以及连接表“user_role”宽度的 user_id 和 role_id 列。
现在,我最近尝试通过使用联接来获取用户的角色,如下所示:
$qb = $this->createQueryBuilder('u')
->join('user_role', 'ur', Join::ON, "I didn't know what to put here, nothing worked ")
无论如何,感谢 this我向两个实体类添加了正确的映射(注释),然后删除了我自己的连接,让 Doctrine 完成这项工作:
$qb = $this->createQueryBuilder('u');
$q = $qb->getQuery();
$users = $q->getResult();
这有效。我有一个所有用户的列表,然后我可以访问他们的角色(感谢 User->getRoles() 方法)。
但是,现在我只想列出具有特定角色的用户,例如“ROLE_ADMIN”,但我不知道如何执行此操作:
$qb = $this->createQueryBuilder('u')
>where('what_to_put_here = :roles')
->setParameter('roles', 'what_to_put_here')
顺便说一下,Doctrine生成的SQL代码是这样的:
SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.personal_name AS personal_name_2, u0_.password AS password_3, u0_.email AS email_4, u0_.is_active AS is_active_5 FROM user u0_
所以没有JOIN。从 Doctrine 文档中我知道这称为“延迟加载” - 将按需获取特定用户的角色。
但是,我怎样才能做这样的事情:
SELECT * FROM `user`
JOIN user_role on user_role.user_id = user.id
JOIN role on role.id = user_role.role_id
WHERE role.role_name = 'ROLE_ADMIN'
?
最佳答案
使用这个:
$qb = $this->createQueryBuilder('u')
->innerJoin('u.roles', 'r')
->where('r.roleName = :roleNameParameter')
->setParameter('roleNameParameter', 'ROLE_ADMIN');
我假设您将 role_name 列映射为实体中的属性 roleName。
关于php - 隐式连接和原则中的位置 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35175779/