Doctrine2 DBAL 存在查询

2024-06-22

我想请求你的帮助Doctrine2 DBAL查询构建于QueryBuilder。我习惯了 ORM,但我认为对于在侦听器中调用的此类查询来说,这是一种矫枉过正的做法。

我需要查询SELECT EXISTS我不知道如何使用 DBAL 构建它QueryBuilder.

我已经创建了一个子查询:

$subQuery = $connection->createQueryBuilder();
$subQuery
    ->select('o.id')
    ->from('order', 'o')
    ->leftJoin('o', 'payment', 'p')
    ->where($subQuery->expr()->isNull('p.id'))
;

我主要是想检查是否有未付款的订单。我现在不知道如何构建SELECT EXISTS询问?有人能指出我正确的方向吗?我在想这样的事情:

$qb->select('EXISTS(?)')->setParameter($subQuery->getDQL())

这是正确的解决方案吗?

@EDIT

经过一段时间的思考,我决定使用 ORM。不幸的是,这也不起作用,我收到一个错误:

line 0, col 7: Error: Expected known function, got 'EXISTS'

DQL 为:SELECT EXISTS(<subquery here>)

考虑到它是用 QueryBuilder 构建的,这有点奇怪:

/* @var $qb QueryBuilder */
$qb = $this->em->createQueryBuilder();
$qb
        ->select($qb->expr()->exists($subQuery->getDQL()));

晚了几年,但你需要具体说明你的EXISTS子查询 SQL 内SELECT or WHEREQueryBuilder 的语句部分,而不是使用参数。

另外因为order是 MySQL 中的保留字,您需要使用标识符引号`(反勾)转义表名。

使用 ORM 时;你必须指定一个FROM引用实体的语句,因此您需要更改您的方法。

$connection = $this->em->getConnection();
$expr = $connection->getExpressionBuilder();
$qbSub = $connection->createQueryBuilder()
    ->select('1')
    ->from('`order`', 'o')
    ->leftJoin('o', '`payment`', 'p', $expr->eq('p.order_id', 'o.id'))
    ->where($expr->isNull('p.id'));

/**
 * @return string "1" if a record exists, "0" otherwise
 */
$connection->createQueryBuilder()
    ->select('EXISTS(' . $qbSub->getSQL() . ')')
    ->execute()
    ->fetchColumn();

结果 SQL

SELECT EXISTS(
   SELECT 1
   FROM `order` AS o
   LEFT JOIN `payment` AS p
   ON p.order_id = o.id
   WHERE p.id IS NULL
);

注意:如果有任何参数,则必须使用绑定占位符的值QueryBuilder::setParameter()在顶层 查询,而不是子查询。

$qbSub = $connection->createQueryBuilder()
    ->select('1')
    ->from('`order`', 'o')
    ->leftJoin('o', '`payment`', 'p', $expr->andX(
        $expr->eq('p.order_id', 'o.id'), 
        $expr->eq('p.name', ':name') // subquery placeholder
    ))
    ->where($expr->isNull('p.id'));

$connection->createQueryBuilder()
    ->select('EXISTS(' . $qbSub->getSQL() . ')')
    ->setParameter('name', $value) // subquery placeholder param value
    ->execute()
    ->fetchColumn();

但是,我建议将您的查询从排除联接更改为包含联接NOT EXISTS。这样做将从结果集中过滤掉已付款的订单。而不是尝试加入每笔付款的每个订单并检索返回的付款null。极大地提高了查询的性能。

Example 数据库小提琴 https://www.db-fiddle.com/f/9pMJYXijCt2nVg62oX54xq/0

SELECT EXISTS (
    SELECT 1
    FROM `order` AS o
    WHERE NOT EXISTS(
        SELECT NULL
        FROM `payment` AS p
        WHERE p.order_id = o.id
    )
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doctrine2 DBAL 存在查询 的相关文章

  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • 如何连接W10通用App和MySQL数据库

    我正在编写第一个在 MySql 数据库上运行的 Windows 10 通用应用程序 我使用了本指南中的代码 适用于 Windows 8 商店应用程序 https blogs oracle com MySqlOnWindows entry h
  • ON DELETE CASCADE 与 Symfony 和 Doctrine 的多对多关系

    我想要与 Symfony 和 Doctrine 建立简单的多对多关系 这实际上是一个单向的一对多关联 可以通过连接表映射为文档表明 http doctrine orm readthedocs org en latest reference
  • 功能测试 - 模拟服务不会保留在服务容器中

    我希望有人能够对我面临的这个问题有所启发 问题 我在功能单元测试中模拟了doctrine orm default entity manager 服务 我将其注入客户端服务容器中 这样我就不必在功能测试过程中访问我的数据库 对于仅涉及 GET
  • 原则 2 使用 LIKE 进行查询

    我有这个查询代码 repository em gt getRepository AcmeCrawlerBundle Trainings query repository gt createQueryBuilder p gt where p
  • MySQL 中的 char / varchar / text / longtext 列是否在文件系统中占据完整大小,即使对于部分填充的单元格也是如此?

    MySQL 中的 varchar text longtext 列是否占据文件系统中的完整长度大小 即使对于不完整的单元格也是如此 参考这篇博客文章 http boolean co nz blog max length for mysql t
  • 使用 Laravel Eloquent 关系构建三元关系

    拥有三个实体 Project Employee 就业 问题描述 员工可以从事多个项目 每个项目都有一份工作 我想要访问所有项目以及您推荐的某个员工的就业情况 我不确定 但这种关系一定看起来像ternary 物理表尚未定义 因此 可以自由地设
  • 在mysql中使用smallint数据类型而不是int真的可以节省内存吗?

    在 mysql 表中使用 Smallint 数据类型而不是常规 int 是否真的可以提高内存使用率 无论如何 硬件不会为所有数据分配完整的 64 位字大小吗 如果它不分配完整的字 那么我们是否会看到由于必须从内存中分配的 64 位字中解析出
  • 我的 PHP 脚本如何判断服务器是否繁忙?

    我想运行一个 cron 作业来进行清理 需要大量的 CPU 和 Mysql 资源 我希望它仅在服务器不相对繁忙时运行 从 PHP 中确定这一点的最简单方法是什么 例如 是否有一个查询返回最后一分钟完成了多少个查询 if function e
  • 连接MySQL服务器的Shell脚本

    我有大约 20 个不同的 MySQL 实例 我想轻松连接到它们 而不必每次都输入完整的地址 用户名和超长的密码 我可以做什么来编写此过程的脚本 这样我所要做的就是为每个实例运行一个 sh 脚本 到目前为止我所拥有的 保存为 instance
  • 如何使用 mysqli 设置排序规则?

    我的数据库使用 utf8 czech ci 排序规则 我也想将其设置为我的数据库连接 如果我不想要默认的 utf8 general ci Mysqli set charset 不会让我设置排序规则 Here https bugs php n
  • 如何使用 EntityType 字段对 Symfony 4 表单进行单元测试

    如何使用 EntityType 字段对 Symfony 4 表单进行单元测试 当我运行测试时 vendor bin simple php单元测试 Unit Form ProductFormTest php 这是我的终端中的输出 PHPUni
  • MySQL Socket 在数千个连续连接后拒绝连接

    我目前正在尝试在当前 Ubuntu 机器上填充 MySQL5 1 数据库 其中包含超过 5 000 000 个条目 由于程序的体系结构 对于每个 INSERT 语句 都会打开和关闭一个新的数据库连接 我知道这是一项昂贵的操作 但更改此操作需
  • 访问实体类中的 Symfony2 全局参数

    我的parameters ini 文件中存储了一个值 我需要在模型的 prepersist 方法期间访问它 通常我使用 this gt container gt getParameter value 但容器在实体中不可用 有没有办法获取实体
  • 检查 Laravel 模型是否已保存或查询是否已执行

    我见过很多人使用这种方式来检查 Laravel 模型是否已保存 所以现在我想知道这是否是一种安全的方法 我还可以检查下面的查询是否像这样执行 检查模型是否已保存 Eg myModel new User myModel gt firstnam
  • 如何将逗号分隔值传递给 MySql 中的存储过程?

    我有像这样的存储过程 CREATE DEFINER test PROCEDURE test get details in p istudid int in p icourseid int in p branchid varchar 20 B
  • 防止 Node.js 中的 SQL 注入

    是否有可能以与 PHP 具有防范 SQL 注入的预准备语句相同的方式防止 Node js 中的 SQL 注入 最好使用模块 如果是这样 怎么办 如果不 有哪些例子这可能会绕过我提供的代码 见下文 一些背景 我正在制作一个 Web 应用程序
  • 即使为空也显示值

    我正在使用以下内容显示过去 7 天内添加的产品计数 即使 COUNT 0 我是否可以以某种方式定制查询以显示过去 7 天的所有产品 查询现状 SELECT DAYNAME dateadded DAY COUNT COUNT FROM pro
  • MySQL 错误:1395 无法从连接视图中删除

    我正在尝试从通过连接多个表生成的视图中删除一条记录 我有一个新用户要在此特定视图上删除和插入 我可以将记录插入视图 但无法从视图中删除 您能指出下面这段 SQL 语句中的错误吗 create view v1 as select a from
  • Perl 和 MySql 中的 utf8 编码

    我的数据库 MySql 有 utf8 general 排序规则 我正在从数据库访问数据并显示一个网页 用 Perl 开发 它显示瑞典语字符 和不同的字符 我检查了Mysql数据库 在那里我可以看到其中包含 字符的数据 看来 访问数据时存在编

随机推荐

  • VBA 错误代码需要对象 --- 经过三次检查但仍然不起作用

    下面的注释行继续向我返回错误Run Time Error 424 Object Required 作为自学课程的一部分 我正在研究此问题 并且我已经进行了三次检查 以确保我正确输入代码并且仍然返回此错误 我尝试在此处查看此错误的其他示例 但
  • Phaser 3 spritesheet 未在 iOS 上显示 - 显示黑色矩形

    我有一个使用 Phaser 3 构建的项目 奇怪的是它没有显示 spritesheet 它显示为黑色矩形 它只发生在移动设备上 在模拟器上运行和在移动 safari 上运行 在我的 Mac 上 它显示正常 chrome 和 safari C
  • 如何仅使用 PIL Image 有条件地修改每个像素的像素值

    我想将所有像素 所有 r g b 的像素值减少 100 那么如果将像素值更新为 255 所有 r g b 其中 r g b 且 r gt 127 我尝试过使用 CV2 和 numpy 它工作正常 但是我被要求仅使用纯 PIL 图像 CV2
  • 在python中检查文件属性

    我想使用 python 检查目录中每个文件的存档位 到目前为止 我已经得到了以下内容 但我无法让它正常工作 该脚本的想法是能够查看所有具有存档位的文件 Thanks coding latin 1 import os win32file wi
  • 了解 KeyValue 嵌入式数据存储与文件系统

    我有一个关于文件系统使用的基本问题 我想使用嵌入式 KeyValue 存储 它非常面向写入 持续 说我的价值大小是 a 10K b 1M 并且读取和更新的数量相等 我可以简单地创建包含值及其名称作为键的文件吗 它不会像使用 LevelDB
  • extractin/构建增强程序选项

    我已成功安装 boost 编译二进制文件并构建 bcp 我还能够使用 bcp 提取正则表达式库 完成此操作后 我在下面找到了一个 gcc gen sh 脚本和一堆 makefile my exported boost regex libs
  • 跨连接列的全文搜索?

    我是自由文本搜索的新手 所以请原谅新手问题 假设我有以下全文索引 Create FullText Index on Contacts FirstName LastName Organization Key Index PK Contacts
  • 如何最大程度地减少 UDP 数据包丢失

    我每秒接收约 3000 个 UDP 数据包 每个数据包的大小约为 200 字节 我编写了一个 java 应用程序 它侦听这些 UDP 数据包并将数据写入文件 然后服务器以先前指定的速率发送 15000 条消息 写入文件后 它仅包含约 350
  • Writeln 能够支持 Unicode 吗?

    考虑这个程序 APPTYPE CONSOLE begin Writeln Z end 使用 Consolas 字体的控制台上的输出是 Z Windows 控制台非常有能力支持 Unicode 如该程序所示 APPTYPE CONSOLE u
  • 四边形到矩形变换

    我想将四边形图像转换为我知道这些顶点的矩形图像 例如 在下图中 我知道坐标 X1 Y1 X4 Y4 和 x1 y1 x2 y2 并且我想将其转换为矩形 如何获得与四边形图像中的 X Y 坐标相对应的矩形图像中的 x y 坐标 gt Y gt
  • 构建 Ad Hoc iOS 应用程序时 OSStatus 错误 -67028

    当我尝试在 iOS 上为仅限 iPhone 的应用程序进行临时分发的存档构建时 出现错误 该应用程序使用正确的证书进行签名 并具有正确的配置文件 与也能够正确签名的朋友进行了检查 因此这不是代码签名问题 每当我尝试使用 Xcode 存档面板
  • 在 Recyclerview 上播放视频时遇到问题

    我在 RecyclerView 中有一个 VideoView 我希望最终有一个可以在 Recyclerview 上播放的视频列表 我决定从一个视频开始 然后再制作多个视频 我似乎无法在 Recyclerview 中播放任何视频 当我在手机上
  • magrittr 管道内的 enquo()

    我只是想了解这里出了什么问题 在第一种情况 工作 中 我分配enquo ted 变量的参数 在第二种情况下 我直接在调用中使用带引号的参数mutate library dplyr df lt tibble x 1 5 y 1 5 z 1 5
  • Java中的选择排序算法

    我在对数组进行排序时遇到一些问题 我正在尝试按升序对其进行排序 我的任务是从用户那里获取一系列整数并将它们存储到一个数组中 然后按升序将它们显示给用户 我很高兴从用户那里获取输入 将其存储在数组中并将其显示回来 我能够运行我的代码并获得我想
  • 从最终用户处获取 Internet Explorer 安全设置

    据报告 我们的网络应用程序存在问题 这些问题似乎只发生在一个客户的站点上 出于诊断目的 有什么方法可以让客户向您发送他们的 IE 安全自定义设置吗 例如在 IE 8 中 工具 gt Internet 选项 gt 安全选项卡 对于 Inter
  • 如何使用 C# 将数据从存储在 FTP 服务器上的 ZIP 文件导入到数据库

    此代码从 FTP 服务器导入 void dat 文件 现在 void dat 位于 archive zip 文件下 那么如何从数据库中的 archive zip 中提取并导入数据 void dat 呢 WebClient request n
  • 如何在 Rust 中使用条件编译宏的示例

    我已经关注了相当多 https doc rust lang org reference attributes html conditional compilation of 文档 https doc rust lang org stable
  • 对整个块使用异步管道和可观察的

    我有一个 Observable 它从 API 返回一个大对象 我需要在我的模板中显示这些值 对于以数组形式返回的其他数据 我可以使用 div p value prop p div 我不需要等待异步完成 ngFor 因为它的父元素中已经有一个
  • 将具有不同 id 的元素拖放到相应的放置区

    我有 12 个具有不同 id 的参数 我想将它们拖放到相应的云中 四朵云中的每一朵都至少有三个相应的参数 如果错误的参数被放入错误的云中 那么应该显示一条错误消息 并将错误的参数发送回初始占位符 到目前为止 我已经成功地对拖放进行了编码 但
  • Doctrine2 DBAL 存在查询

    我想请求你的帮助Doctrine2 DBAL查询构建于QueryBuilder 我习惯了 ORM 但我认为对于在侦听器中调用的此类查询来说 这是一种矫枉过正的做法 我需要查询SELECT EXISTS我不知道如何使用 DBAL 构建它Que