我有很多用户和角色的关系。也就是说,我有用户表和实体类、角色表和实体以及连接表“User\u Role”宽度User\u id和Role\u id列。
现在,我最近尝试通过使用连接让用户使用他们的角色,如下所示:
$qb = $this->createQueryBuilder('u')
->join('user_role', 'ur', Join::ON, "I didn't know what to put here, nothing worked ")
无论如何,多亏了这个答案,我给我的两个实体类添加了正确的映射(注释),然后删除了我自己的连接,让理论来完成这项工作:
$qb = $this->createQueryBuilder('u');
$q = $qb->getQuery();
$users = $q->getResult();
这是有效的。我有一个所有用户的列表,然后我可以访问他们的角色(感谢用户)-
但是,现在我只想列出具有特定角色的用户,例如“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_
所以没有加入。从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\u name映射为实体中的属性roleName。
在当前的jOOQ版本中,有一个隐式连接表的功能。 它允许使用表上定义的外键约束进行“导航”。 它是否也适用于表?例如,如果我有
我使用的是SPARK-SQL-2.4.1V和Java1.8。和Kafka版本SPARK-SQL-KAFKA-0-10_2.11_2.4.3。 这会产生以下错误: 类型Dataset中的方法join(Dataset,String)不适用于参数(Dataset,String,String)
这些天我正在阅读。我了解到可以在JPQL中使用或。 显式连接 em.createQuery(“从Book b JOIN b.publisher p中选择b.title、p.name”)。getResultList(); 隐式联接 em.create查询("SELECTb.title,b.publisher.nameFrom Book b"). getResultList(); 这些示例的来源:链接
问题内容: 显式内部连接与隐式内部连接是否存在效率差异?例如: 与 问题答案: 在性能方面,它们是完全相同的(至少在SQL Server中)。 PS:请注意,自SQL Server 2005起不赞成使用该语法。(仍支持问题中使用的语法) 弃用“旧样式” JOIN语法:只是部分事情
问题内容: 我有一个字符串列表- 这些是我感兴趣的属性名称:我想联接这些字符串的值,但不使用属性名称,而是使用它们的属性值。我看到起点是-但是如何说出将列表中的元素与属性文件中的值进行匹配? 该列表将是:并且在属性文件中,我具有: 我想获取字符串: 问题答案: 您可以利用和 从@Controller返回模型: 您可以像这样加入翻译后的邮件列表: 哪个应该产生您期望的结果,例如: 名称和地址是消息文
问题内容: 大家好。我有一个使用ServerSocket和Socket类用Java编写的服务器。 我希望能够检测并处理断开连接,然后在必要时重新连接新客户端。 检测客户端断开连接,关闭套接字然后接受新客户端的正确步骤是什么? 问题答案: 大概是在从套接字读取数据,也许是在输入流上使用包装器,例如BufferedReader。在这种情况下,当相应的读取操作返回-1(对于原始read()调用)或为nu
问题内容: 我试图了解哪些是应用程序的“物理”限制。 在客户端: 在服务器端: 在OSX中达到文件限制(256)时,统计信息如下 让我感到困惑的是: 如果我强行关闭连接(这是我想对客户端执行的操作,为什么我仍在使用文件句柄(因此达到文件限制),请执行以下操作:编辑:添加延迟似乎使服务器可以保持呼吸并且永远不会达到文件限制)? 有没有一种方法可以完全关闭套接字,以便可以确定很少达到文件限制(我知道可
我有一个隐藏的蓝牙设备,但我知道它的蓝牙MAC地址。 如何使用Android连接到该设备?