原则 2 使用 QueryBuilder 进行条件多行更新

2024-06-26

这个问题有一些答案,但实际上,它们似乎都无法帮助完成一项简单的任务。

我需要使用 Doctrine2 QueryBuilder 根据一个查询中的条件更新多行。最明显的方法应该是错误的:

$userAgeList = [
    'user_name_a' => 30,
    'user_name_b' => 40,
    'user_name_c' => 50,
];

//Array of found `User` objects from database
$usersList = $this->getUsersList();

foreach($usersList as $user)
{
    $userName = $user->getName();

    $user->setAge($userAgeList[$userName]);

    $this->_manager->persist($user);
}

$this->_manager->flush();

它将为每个创建一个更新查询User事务中的对象,但我只需要一个查询。这个来源 http://labs.octivi.com/mastering-symfony2-performance-doctrine/建议您相反应该依赖UPDATE查询,因为在这种情况下我们只执行一个SQL UPDATE声明,所以我做了这样的:

$userAgeList = [
    'user_name_a' => 30,
    'user_name_b' => 40,
    'user_name_c' => 50,
];

$builder = $this->_manager->getRepository(self::REPOSITORY_USER)
    ->createQueryBuilder(self::REPOSITORY_USER);

foreach($userAgeList as $userName => $age)
{
    $builder->update(self::REPOSITORY_USER, 'user')
        ->set('user.age', $builder->expr()->literal($age))
        ->where('user.name = :name')
        ->setParameter('name', $userName)
        ->getQuery()->execute();
}

但这也使得(显然)是一堆更新而不是一个更新。如果我分配结果getQuery()到一个变量,并尝试execute()在 foreach 循环之后,我看到 $query 理解并积累了set(),但它没有做这样的事情WHERE健康)状况。

有什么方法可以在 QueryBuilder 中完成这样的任务吗?

更新-类似问题:

学说和 symfony2 中的多个更新查询 https://stackoverflow.com/questions/10405467/multiple-update-queries-in-doctrine-and-symfony2- 这一个不假设更新one query;

Symfony - 更新多条记录 https://stackoverflow.com/questions/8764029/symfony-update-multiple-records- 这还表示,qoute,“一选一更新”;

使用 Symfony 中的 Doctrine 更新多个列 https://stackoverflow.com/questions/4803436/update-multiple-columns-with-doctrine-in-symfony - WHERE这个查询中的条件总是相同的,不是我的情况;

原则 2:使用查询生成器更新查询 https://stackoverflow.com/questions/4337751/doctrine-2-update-query-with-query-builder- 和之前一样,只有一个WHERE clause;

http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html- 条令批处理根本没有提到条件......

在 MySQL 中我曾经使用CASE-THEN,但这不受 Doctrine 支持。


None

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

原则 2 使用 QueryBuilder 进行条件多行更新 的相关文章

随机推荐

  • OpenAPI 查询参数描述未设置为文本框作为占位符

    我已经使用描述来添加查询参数的详细信息 例如 parameters name role in query required true schema type string description This is test descripti
  • PHP 和 ESB(使用 Mule)(ESB:企业服务总线)

    您在 PHP 项目中何时 何地以及为何使用 ESB 您认为在何处 何时以及为何在 PHP 项目中使用 ESB 有意义 ESB 以及像 Mule 这样的 ESB 促进者 是否提供了 PHP 和本地 LAMP 技术所缺乏的任何功能 Edit 我
  • Android AsyncTask 启动另一个 AsyncTask

    我目前正在 AsyncTask 的 onPostExecute 方法中执行类似的操作 其中NewTask is not当前正在执行的任务 private class OlderTask extends AsyncTask
  • 如何在 PHP 中识别请求的页面

    有没有简单的方法来识别最初处理请求的文件 忽略获取参数并处理 至少是基本的 映射 例如 to index php 理想情况下 我正在寻找类似的东西 SERVER REQUEST URI 但无论 get 参数如何 它都会返回相同的值 并且该值
  • 如何使用 selenium 和 junit 测试多个浏览器(版本)

    我刚刚发现了硒 一个很棒的工具 我计划运行 使用 selenium ide 生成的 junit4 代码 但我需要它与许多浏览器 网络驱动程序一起运行 这个用例有 junit java 模式吗 我的第一个想法是使用 RunWith Param
  • 特征/类类型参数优先于方法类型参数的规则是什么

    我已经使用 scala 一段时间了 我认为我真的开始理解一切 好吧 大多数事情 但我发现自己对 Map 类中的许多方法定义感到困惑 我知道 FoldLeft 等如何工作 但我感到困惑的是 Map 函数中使用的类型参数 我们以 FoldLef
  • 如何使用 .Net (C#) 在 Windows 中安全地存储 AES 密钥?

    我一直在寻找一种方法来存储给定的 AES 密钥 以便无法检索它 但它仍然可以用于加密和解密 使用 C 我认为可以找到非对称密钥存储的等效项here http msdn microsoft com en us library tswxhw92
  • 评估 R 中字符串指向的函数

    假设我有以下内容 x lt 1 10 squared lt function x x 2 y lt squared 我希望能够使用 y 定义的字符串来评估该函数 像 eval y 这样的东西 我知道这是错误的 但会返回 1 1 4 9 16
  • Ruby IMAP 库:如何显示文件夹中的所有邮件?

    我需要一个脚本来获取所有文件夹中的所有电子邮件 并对其及其附件进行本地备份 here https www ombulabs com blog ruby imap a comprehensive guide to interacting wi
  • 基于 Accept-Language 的重定向

    我需要尊重网络浏览器的语言首选项列表 支持的语言为英语和法语 例如 http accept language jp JP fr en US en 重定向到名为 French 的目录 如何使用 htaccess 文件中的重写规则来做到这一点
  • 如何从 tarantool 中选择有限数量的记录,就像 SQL 中的 SELECT LIMIT 一样?

    我想在 Tarantool 空间上执行选择 使用过滤和限制结果 就像我可以使用简单的 SQL 查询一样 SELECT FROM users WHERE age gt 33 LIMIT 1 我怎样才能做到这一点 可以使用 Lua 和 SQL
  • Oracle 函数编译成功,但在执行 PLS-00221 时抛出错误:不是过程或未定义

    我有简单的oracle功能 create or replace function abs test func test in in number return number is test out number BEGIN test out
  • JavaScript 设置滚动高度

    在 JavaScript 中 将一个元素的滚动高度设置为另一个元素的滚动高度的正确方法是什么 直接赋值没有效果 谢谢 格雷格 直接是不可能的 scrollHeight 是一个只读属性 包含元素内容的总高度 以像素为单位 如果有元素 A 并且
  • CA随机3色

    是否存在随机元胞自动机规则 如规则 30 且具有 3 种颜色 这实际上是一个研究问题 您必须对发现的元胞自动机 CA 规则进行统计测试 以证明它是随机的 如果您想做这样的研究项目 请查看Wolfram 科学暑期学校 http www wol
  • 在 Laravel 5 中合并 'with' 和 'whereHas'

    我在 Laravel 5 中使用 Eloquent 编写了这段代码 它工作得很好 filterTask function query use id query gt where taskid id User whereHas submiss
  • jasper 报告分页符增加底部空白

    I have a requirement to create a PDF page using jasper report PDF is very huge so I need to divide it into three pages o
  • 仅使用 CSS 更改颜色几秒钟

    是否可以在悬停 X 秒时更改 div 的颜色 然后仅使用 CSS 返回其原始颜色 我不希望颜色之间有任何淡入或淡出 例如 如果我想在悬停时将 div 的颜色更改为黄色 1 秒 则它必须保持黄色 1 秒 然后立即返回到原始颜色 This ht
  • 如何在 Adob​​e AEM 中应用主题?

    Adobe AEM 以前称为 Adob e CQ 中的客户端库 ClientLib 功能可以轻松按类别包含客户端库 并且每个库都可以通过依赖项引入其他库 然而 围绕 主题 的文档有点薄弱 This link http wem help ad
  • 溢出-x 不工作

    我正在尝试为我的画廊实现一个滑块 目前 CSS 存在溢出 x 无法正常工作的问题 我想要一个水平滑块而不是垂直滚动 这是fiddle http jsfiddle net nevinm 6H43f 请务必看一下 testimg height
  • 原则 2 使用 QueryBuilder 进行条件多行更新

    这个问题有一些答案 但实际上 它们似乎都无法帮助完成一项简单的任务 我需要使用 Doctrine2 QueryBuilder 根据一个查询中的条件更新多行 最明显的方法应该是错误的 userAgeList user name a gt 30