hyperf 模型批量更新数据

news/2024/7/7 21:43:42

使用hyperf框架没有批量更新方法,只能自己拼接SQL语句进行批量跟你更新

封装一个SQL句更新方法

//批量更新
    public function updateBatch($multipleData = [])
    {
        try {
            $tableName = Db::getTablePrefix() . 'table';
            // 获取到数据里面的所有字段名
            $firstRow  = current($multipleData);
            $updateColumn = array_keys($firstRow);
            // 以id为条件更新
            $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn);
            $updateSql = "UPDATE " . $tableName . " SET ";
            $sets      = [];
            $bindings  = [];
                $setSql = "`price` = CASE id";
                foreach ($multipleData as $data) {
                    $setSql .= " WHEN " . $data['id'] . " THEN ".rand(7,15);
                }
                $setSql .= " END ";
                $sets[] = $setSql;
            $updateSql .= implode(', ', $sets);
            // 更新条件
            $whereIn   = collect($multipleData)->pluck($referenceColumn)->values()->all();
            $whereIns = implode(',', $whereIn);
            // 最终拼接好的SQL语句
            $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIns . ")";
            return Db::update($updateSql);
        } catch (\Exception $e) {
            return false;
        }
    }

上面方法,最终生成的$updateSql语句如下:

UPDATE table SET 
`field` = CASE id 
WHEN 279 THEN 8 
WHEN 278 THEN 9 
WHEN 277 THEN 15 
WHEN 223 THEN 9 
WHEN 221 THEN 12
END 
WHERE `id` IN (279,278,277,223,221)


http://lihuaxi.xjx100.cn/news/141993.html

相关文章

Linux下NANDFLASH probe函数分析

本文记录一下自己平台上NANDFLASH驱动的执行流程。 驱动入口: module_platform_driver(ali_nand_driver); module_platform_driver是一个宏,位于kernel根目录下include/linux/platform_device.h,其展开如下: #define module_platform_driver(__platfo…

Java中的容器(二) 双例集合

容器(二) 双例集合 1、Map接口介绍 Map中不能包含重复的Key&#xff0c;但可以包含重复的Value。 Map中的常用方法 put方法&#xff1a;key不存在时返回空&#xff0c;key存在时更新value&#xff0c;并返回旧的value。 2、HashMap容器类 通过KeySet获取元素 Set<String…

VectorDraw开发者框架(VDF)

VectorDraw开发者框架(VDF) VectorDraw Developer Framework(VDF)是一个易于创建、管理和打印2D和3D图纸的组件。VectorDraw对象公开了与最常见的矢量格式和其他CAD对象兼容的方法和属性。它支持10多种矢量格式和多种光栅格式。VectorDrawDeveloperFramework(VDF)是完全面向对象…

arraybuffer 转json

场景后端返回的数据是arraybuffer 类型&#xff0c;请求成功下载excel&#xff0c;失败弹出错误原因 <script setup lang"ts"> import { ElMessage} from element-plus; // 下载; const exportData async (fileName: string) > {const res await downloa…

详解Git合并(Merge)错误如何回退。(包括Reset, Revert和页面回滚三种,并说明其优缺点)

文章目录1. 问题场景描述1.1 场景模拟2. 解决方案2.1 利用git reset --hard命令2.2 利用git revert 命令2.3 使用页面进行回滚&#xff08;效果与Revert一致&#xff09;1. 问题场景描述 我的项目包含两个重要git分支&#xff1a;master&#xff08;生产环境&#xff09;&…

在 AWS Marketplace 上订阅 EMQX Cloud 按量计费版

近日&#xff0c;全球领先的开源物联网数据基础设施软件供应商 EMQ 旗下的全托管 MQTT 消息云服务 EMQX Cloud 正式上架云端事业领导者亚马逊 AWS Marketplace&#xff0c;与国际各大云端软件并列销售。 在 AWS Marketplace 中即付即用的 EMQX Cloud 的推出&#xff0c;将为开…

仪器仪表与传感器信号带宽及频响的现场匹配技术

概述:工业现场传感器与PLC/FCS/DCS、仪器仪表之间输入输出的模拟信号隔离放大器(亦称模拟量隔离变送器)属于模拟信号调理的范畴。模拟信号隔离放大器能有效保护各级控制回路,消除或减弱环境噪声对测试电路的影响,抑制公共接地、变频器、电磁阀及浪涌脉冲对设备的干扰,同时…

Java面试大厂名企高频真题--Spring 注解

要求 掌握 Spring 常见注解 提示 注解的详细列表请参考&#xff1a;面试题-spring-注解.xmind 下面列出了视频中重点提及的注解&#xff0c;考虑到大部分注解同学们已经比较熟悉了&#xff0c;仅对个别的作简要说明 原图太大&#xff0c;放不上来&#xff0c;有需要的同学可以…