DQL 左连接 - sql 示例

2024-03-04

运行良好的 SQL 是:

SELECT ro.id_role
       ,rr.id_role_resource
       ,re.id_resource
    FROM resource re
    LEFT JOIN role_resource rr
        ON rr.resource_id = re.id_resource
    LEFT JOIN role ro
        ON ro.id_role = rr.role_id

现在我必须写 DQL- 这是表架构:

role: id_role, name

角色资源:id_role_resource, role_id, resource_id, permission

资源:id_resource, controller,action ...

最后一个表在role_resource表中没有对应的记录。 这就是为什么我需要 DQL 中的左连接查询。


通常情况下,如果您有一个Resource实体具有$roles属性和正确的注释(OneToMany, ManyToMany)然后你的连接表(role_resource)不会有或不需要它自己的 auto_increment id。

这是因为 Doctrine 处理关联信息并根据它们知道何时需要连接表。 Doctrine 还知道在基于相同关联信息连接两个实体时使用什么条件。

因此,如果 SQL 查询使用 2 个连接子句通过第三个表连接两个表,则 DQL 查询只需要知道关联名称,并且它将拥有所有可用的“连接表”和“连接条件”信息。

所以一个简单的查询如下所示:

SELECT
        /* i assume $idRole is the name of the property
         * mapped to the id_role column
         */
        ro.idRole,

        /* i assume $idResource is the name of the property
         * mapped to the id_resource column
         */
        re.idResource

FROM YourNamespace\Resource re
JOIN re.roles

使用等效的 queryBuilder 语法:

$this->getEntityManager()->createQueryBuilder()
    ->select(array('ro.idRole', 're.idResource'))
    ->from('YourNamespace\Resource', 're')
    ->join('re.roles');

But JOIN默认为INNER JOIN因此我们希望通过将查询重写为以下方式来解决此问题:

SELECT  ro.idRole,
        re.idResource
FROM YourNamespace\Resource re
LEFT JOIN re.roles

使用等效的 queryBuilder 语法:

$this->getEntityManager()->createQueryBuilder()
    ->select(array('ro.idRole', 're.idResource'))
    ->from('YourNamespace\Resource', 're')
    ->leftJoin('re.roles');

然而如果你want the role_resource表拥有自己的 auto_increment id 并且可以在 Doctrine 查询中访问,那么 Doctrine 需要了解该表——它需要映射到一个单独的实体,并且您需要明确您正在加入 Resources、RoleResources 的事实和角色。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DQL 左连接 - sql 示例 的相关文章

  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 如何 md5 所有列(无论类型如何)

    我想创建一个 sql 查询 或 plpgsql 它将 md5 所有给定的行 无论类型如何 但是 在下面 如果 1 为空 则哈希为空 UPDATE thetable SET hash md5 accountid accounttype cre
  • 为表中的每个组选择前 N 行

    我面临一个非常常见的问题 即 为表中的每个组选择前 N 行 考虑一个表id name hair colour score列 我想要一个结果集 对于每种头发颜色 都能得到前 3 名得分手的名字 为了解决这个问题 我得到了我所需要的Rick O
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 如何使用 LAMBDA 表达式在 LINQ 中执行 IN 或 CONTAINS?

    我有以下 Transact Sql 我正在尝试将其转换为 LINQ 并且很挣扎 SELECT FROM Project WHERE Project ProjectId IN SELECT ProjectId FROM ProjectMemb
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4

随机推荐

  • 如何发送包含在 include_bytes! 中的文件?作为铁反应?

    我正在尝试发送包含在二进制文件中的文件include bytes 在 Iron 应用程序中 我希望我的应用程序最终得到一个文件 它只需要很少的 HTML CSS 和 JS 文件 这是我正在摆弄的一个小测试设置 extern crate ir
  • 在 matplotlib 中绘制时,正态分布显得过于密集

    我正在尝试估计数据的概率密度函数 就我而言 数据是形状为 8200 x 8100 的卫星图像 下面 我向您展示 PDF 的代码 函数 is outlier 是由在此发布此代码的人借用的 正如我们所看到的 图 1 中的 PDF 过于密集 我想
  • 如果我运行 mvn deploy ,它会构建新的工件还是只是将现有的工件部署到远程服务器?

    Note 这个问题最初是由拉希鲁 古纳提拉克 https stackoverflow com users 187248 lahiru gunathilake as an answer https stackoverflow com ques
  • 如何使用索引在两列之间进行查询过滤

    我需要一个可以在 mysql postgres 和其他主要数据库上运行的通用 sql 查询 我有一个名为autumn4 ip三列 id start end 均为整数 如何进行连接以便使用 BUT 不是 BETWEEN 而是 JOIN 像 伪
  • 仅在函数未被调用时调用函数/仅运行函数一次

    我有一个函数animate images在我的网站的一些页面上运行 执行特定的动画 我遇到的问题是 当用户再次导航到同一页面时 除了已经运行的实例之外 该函数还会被第二次调用 有没有办法做这样的事情 if animate images an
  • Python2 按值合并列表列表

    我有一个包含 4 个元素的列表 它看起来像 L grape green 2 100 grape purple 3 3 apple red 2 15 apple greed 3 10 apple red 4 4 banana yellow 2
  • Android Picasso库,如何添加身份验证标头?

    我尝试使用自定义身份验证器设置自定义 OkHttpClient 但是正如文档所说 响应来自远程 Web 或代理服务器的身份验证质询 我必须为每个图像发出 2 个请求 这并不理想 有没有像Retrofit那样的请求拦截器 或者我在 OkHtt
  • 如何向下舍入到最接近的 10 次方?

    我什至找不到这个的搜索关键字 请考虑这段代码 float inputValue getInputValue float resultValue if inputValue lt 0 1f resultValue 0 01f else if
  • 如何在 C# 中调用此 C 函数(解组返回结构)?

    我想使用 c 互操作从用 c 编写的 dll 中调用函数 我有头文件 看看这个 enum CTMBeginTransactionError CTM BEGIN TRX SUCCESS 0 CTM BEGIN TRX ERROR ALREAD
  • 如何使用Fiddler监控Windows服务?

    看来 Fiddler 不会监视任何与 Fiddler 本身不在同一用户下运行的内容 我想监视运行在以下环境下的 Windows 服务Local System 这可能吗 我通过参考使它起作用有没有办法配置 Fiddler 来拦截来自 Wind
  • 转置 html 表格

    是否可以转置 html 表格 无需 javascript 我正在从对象列表生成一个带有rails 和erb 的表 因此 当每一行对应一个对象时 做到这一点非常容易和自然 但是 我需要将每个对象表示为一列 我只想有一个循环并描述每一列 而不是
  • 每当事件发生时触发 Spark 作业

    我有一个 Spark 应用程序 每当收到有关某个主题的 kafka 消息时就应该运行 我每天不会收到超过 5 6 条消息 因此我不想采用 Spark Streaming 方法 相反 我尝试使用提交申请SparkLauncher但我不喜欢这种
  • NSManagedObject 无法遵守 Swift 中的协议

    我需要 NSManagedObject 和常规 NSObject 的共享接口 在 Objective c 中 我可以使用协议来实现这一点 但在 Swift 中我遇到了这个运行时错误 有什么解决办法吗 提前致谢 protocol Produc
  • 将多列转换为一大列 (Excel 2010)

    我想将 15 096 列文本 每个单元格一个单词 转换为一个大列 包括原始列中的每个单元格 我原来的列大小各不相同 即一列可能有 4 个单元格 行 而另一列可能有 100 个单元格 行 我没有使用 VBA 的经验 但已经录制了一个宏来手动执
  • 如何将netcdf4-python安装到ubuntu14.04上?

    我想将 netcdf4 python 安装到我的 Ubuntu14 04 上 libhdf5 dev 1 8 11 5ubuntu7 amd64 deb 和 libnetcdf 4 1 3 7ubuntu2 amd64 deb 已安装 我从
  • Oracle SQL Developer - 错误:“在预期位置未找到 FROM 关键字”

    抱歉我的菜鸟问题 但我正在尝试找出为什么我的 Oracle SQL 指示错误 在预期的位置未找到 FROM 关键字 如下图 我尝试运行的代码如下 select PCKCOO AS COMPANHIA DO PEDIDO NUMERO DO
  • 从小部件启动时,活动未显示在最近的应用程序列表中

    我创建了一个应用程序小部件 单击该小部件后 会在我的应用程序中启动一个活动 它发起的活动是NOT主启动器活动 如应用程序清单中设置
  • 有人有使用 berkeley db 和 PHP 的经验吗?

    我必须访问和写入其他应用程序共享的一些伯克利数据库文件 我真的没有找到任何关于在 PHP 中使用它的信息 看起来确实不太受欢迎 有谁有任何链接或资源可供我用来让事情顺利进行吗 Thanks 这不就是dba的功能吗 http php net
  • 如何同时指定div的绝对位置和相对位置

    我是新来的 我想知道如何同时将 div 的位置指定为绝对位置和相对位置 因为 div 可以同时是子级和父级 感谢您的帮助 如果孩子处于绝对位置 任何孙子可以再次绝对定位关系中给孩子 也就是说 孩子不需要position relative为孙
  • DQL 左连接 - sql 示例

    运行良好的 SQL 是 SELECT ro id role rr id role resource re id resource FROM resource re LEFT JOIN role resource rr ON rr resou