教义:如何从侦听器(preDqlSelect)内的选择查询中删除部分 where 子句?

2024-07-04

我的侦听器是行为的一部分,该行为应该删除任何调用的 select 查询的 where 子句中的所有 is_published 检查。在子句中添加一个部分确实很容易,但如何删除一个部分呢?

有一些功能,例如Doctrine_Query->removeDqlQueryPart('where'), 但这删除了完整的 where 子句,而我只需要'is_published = ?'要删除的部分。

不过我可以用正则表达式或其他东西以某种方式手动处理这个问题。但棘手的部分是,如何删除“?”代表的参数从相应的参数数组(可通过检索Doctrine_Query->getRawParams()).

所以我问,有没有一种干净的方法来转换这种查询:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?

到这个被剥离的参数,并且不会弄乱问号代表的参数:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?

这当然只是一个简单的例子,我的查询有点复杂。 不幸的是,由于 symfony 框架,我一直坚持 1.0.x 原则。


基于约书亚·科迪的回答

    $qb = <query builder>;
    $qb_where_part = $qb->getDqlPart('where')->getParts();
    $qb->resetDQLPart('where');
    // we know by dumping that it is an and operator in our case, generic way shoud take op in account
    //var_dump($qb->getDqlPart('where'));
    foreach ($qb_where_part as $where_clause) {
        if ('o.date > :date_debut' === $where_clause) continue;
        $qb->andWhere($where_clause);
    }
    $params = $qb->getParameters();
    $new_date_fin = null;
    foreach ($params as $key => $param) {
        if ($param->getName() === 'date_debut') {
            $new_date_fin = $param->getValue();
            $params->remove($key);
        }
        if ($param->getName() === 'date_fin' && $new_date_fin) {
            $param->setValue($new_date_fin);
            //var_dump($param->getValue());
        }
    }
    $qb->setParameters($params);
    var_dump($qb->getParameters());
    var_dump($qb->getDqlPart('where'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教义:如何从侦听器(preDqlSelect)内的选择查询中删除部分 where 子句? 的相关文章

  • DoReferenceTransaction 未取得成功

    看看我如何开始完整的程序 步骤1 首先调用SetExpressCheckout AMT 0 00 PAYMENTREQUEST 0 AMT 0 00 PAYMENTACTION BILLINGAGREEMENTDESCRIPTION BIL
  • 如何解决phpmyadmin超时问题?

    我想要导入巨大的 at least300 mb 通过 phpMyAdmin 的 SQL 脚本 我试过了 post max size 750M upload max filesize 750M max execution time 300 m
  • 检查您的代码是否在 64 位 PHP 上运行

    有谁知道在 PHP 中检查脚本是否以 32 位或 64 位运行的方法 目前我使用的是 PHP 5 3 5 理想情况下 我想编写一个函数 以便我的代码如下所示 if is 32bit true do 32bit workaround do e
  • PHP SQLSRV:sqlsrv_query() 是否可以正确地准备 select 语句?

    TL DR Does sqlsrv query 做同样的工作select陈述比sqlsrv prepare and sqlsrv execute 关于准备好的陈述 做什么 我怎样才能做一个安全的select陈述 一点历史 我是 PHP 开发
  • 导出/下载表 HTML-PHP 到 Excel 文件

    我有一个 HTML PHP 表格 可以从 mySQL 中提取数据 请看这里link https anakpanti com ab cargo controllers searchshipment 例如 请搜索此发货代码以获取表格内的结果 4
  • PHP 函数从 Web 服务获取数据

    我怎样才能从中获取数据这个网络服务 http onleague stormrise pt 8031 OnLeagueRest resources onleague Utils Countries使用 PHP 我需要一个简单的 PHP 函数来
  • 在提交之前合并 $_GET 变量[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不太确定这是否可能 但这是我无法弄
  • 调整大小然后裁剪 PHP

    好的 基本上我希望所有图像都是 170x170px 的正方形 因此 如果图像不是正方形 我希望调整它的大小 然后在中间裁剪 我花了很多时间玩这个 但一无所获 我已经让它裁剪较大图像的一部分等 但我特别需要调整图像大小 然后裁剪 任何帮助将不
  • PDO中使用持久连接有什么缺点

    在 PDO 中 可以使用以下方法使连接持久化PDO ATTR PERSISTENT属性 根据 php 手册 持久连接不会在脚本结束时关闭 而是 当另一个脚本请求连接时 会被缓存并重新使用 相同的凭据 持久连接缓存允许您 避免每次建立新连接的
  • 在 PHP 中组合数组

    尝试学习 PHP 中的数组 为简洁起见 发布了片段 HTML 表单在这里 p What are your favorite type of cookies p
  • 以限制公共访问同时仍允许父类访问的方式覆盖子类中的公共方法?

    我有一个通用的 Collection 类 具有各种公共 getter 方法 要从 Collection 中获取一项 请调用 get 还有几种返回多个项目的方法 getMany getRange getAll find findAll que
  • 未找到特征“Venturecraft\Revisionable\RevisionableTrait”

    我正在使用 laravel 4 我想跟踪对表进行的所有交易的历史记录 我按照这些步骤操作 added venturecraft revisionable 1 在作曲家 json php composer phar update 在我的项目的
  • 如何使用 Android Volley 显示/请求 JSON 对象?

    我在 Android Studio 中遇到如何请求 JSON 对象的问题 我的 Logcat 只能打印 String onResponse 而不能打印 JSONObject 值 我在 AccessActivity java 内的 try 行
  • PHP imap_search 未检测到 gmail 收件箱中的所有邮件

    当我运行一个非常简单的imap search在我的 GMail 收件箱中 搜索返回的邮件数量少于应有的数量 这是任何拥有 GMail 帐户的人都可以运行的脚本 host imap gmail com 993 imap ssl user fo
  • preg_replace '

    ' 为 '
    '?

    我的代码删除了 p 起始标签 但现在我想替换结尾 p 带换行符的标签 我怎样才能做到这一点 这就是我所拥有的 content This is the content newcontent preg replace
  • 我可以通过 Reflection 获取私有财产的价值吗?

    它似乎不起作用 ref new ReflectionObject obj if ref gt hasProperty privateProperty print r ref gt getProperty privateProperty 它进
  • AJAX 调用后使用 jquery 刷新 DOM

    我正在做一个新项目http www hotwirerevealed com http www hotwirerevealed com它显示 识别 hotwire com 上的酒店 输入状态和目的地后 我有一个 javascript 函数 它
  • 致命错误:对布尔值调用成员函数 count()

    class db private pdo query error false results count 0 private function construct try host config get mysql host databas
  • 双因素认证系统

    我正在尝试使用 SMS 作为第二种身份验证方法来设计一个双因素身份验证系统 在 PHP 上 这是一个测试项目 任何人都可以帮助我设计这项服务吗 这将是一个基于网络的系统 下面是我到目前为止所做的 客户端输入用户名和密码后 网站将向我们的服务
  • 何时何地打开数据库连接

    我正在努力实现发现的 mysql 类的使用here http www ricocheting com scripts php mysql wrapper php在现有脚本中 该脚本几乎总是需要与数据库交互 即使有时不需要 在这种情况下 最佳

随机推荐