当前位置:网站首页>关于Yii2批量更新的操作
关于Yii2批量更新的操作
2022-08-03 21:29:00 【dj1540225203】
有时候需要更新一个表里面很多字段,用内置方法update更新可能还算适用
内置方法如下:
Yii::$app->db->createCommand()->update($table, $columns, $condition = '')->execute();
第一个是表,第二个修改字段 ,第三个是条件
实例:
Yii::$app->db->createCommand()->update(User::tableName(), ['user_state' => '1'], "user_name='{$info['user_id']}'")->execute();
但是满足不了特定的情况,如:数据库包含顺序标识sort字段,在删除其中一条数据后,要把之后的数据sort字段进行减1。
这样一来更新内置方法就无法适用了,目前也没找到类似的内置方法(有的话欢迎评论)部分开发会使用循环来更新,因为这样的数据都不会过超过一百条,所有循环还算适用,但是有什么办法只执行一次更新操作吗?当然有,我们可以使用原生的SQL语句拼接操作!!为了方便使用,我将它写成一个函数,代码如下:
/**
* @param $table string 表名
* @param $key string 条件主键,作用参考switch中的case
* @param $val self 修改主键
* @param $data array $key与$val主键对应的数据载体
* @return string 批量更新SQL
*/
public function batchUpdate($table, $key, $val, $data){
$ids = implode(",", array_column($data, $key));
$condition = " ";
foreach ($data as $v){
$condition .= "WHEN {$v[$key]} THEN {$v[$val]} ";
}
$sql = "UPDATE `{$table}` SET {$val} = CASE {$key} {$condition} END WHERE {$key} in ({$ids})";
return $sql;
}
调用实例:
$data = [["user_id"=>1,"sort"=>1],["user_id"=>4,"sort"=>2],["user_id"=>5,"sort"=>3]];
$sql = $this->batchUpdate("user", "user_id", "sort", $data);
$res = Yii::$app->db->createCommand($sql)->execute();
边栏推荐
- 【kali-漏洞扫描】(2.1)Nessus解除IP限制、扫描快无结果、插件plugins被删除(中)
- Unification of east-west and north-south communications
- LitJson报错记录
- 2022年全国职业院校技能大赛网络安全 B模块 B-1任务一:主机发现与信息收集 国赛原题
- Cross-end development technical reserve record
- 现网设备兼容SRv6网络演进
- 函数,递归以及dom简单操作
- 小朋友学C语言(3):整数、浮点数、字符
- 2022年全国职业院校技能大赛网络安全 B模块 任务十windows操作系统渗透测试 国赛原题
- Nacos配置文件管理、微服务获取Nacos配置文件
猜你喜欢

【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试

XSS线上靶场---prompt

IO thread process -> thread synchronization mutual exclusion mechanism -> day6

idea2021.1.3配置Gradle步骤

详解虚拟机!京东大佬出品 HotSpot VM 源码剖析笔记(附完整源码)

《QDebug 2022年7月》

XSS online shooting range---Warmups

【历史上的今天】8 月 3 日:微软研究院的创始人诞生;陌陌正式上线;苹果发布 Newton OS

好朋友离职了,一周面试了20多场,我直呼内行

安全基础8 ---XSS
随机推荐
CAS:1620523-64-9_Azide-SS-biotin_生物素-二硫-叠氮
距LiveVideoStackCon 2022 上海站开幕还有3天!
CAS:1260586-88-6_生物素-C5-叠氮_Biotin-C5-Azide
Transformer怎么入门?如何学习Transformer?
C. awoo‘s Favorite Problem--Educational Codeforces Round 130 (Rated for Div. 2)
XSS线上靶场---haozi
FVCOM 3D Numerical Simulation of Hydrodynamics, Water Exchange, Dispersion and Transport of Oil Spills丨FVCOM Model Watershed, Numerical Simulation Method of Marine Water Environment
XSS online shooting range---haozi
业界新标杆!阿里开源自研高并发编程核心笔记(2022 最新版)
【kali-漏洞扫描】(2.1)Nessus下载安装(上)
基于DMS的数仓智能运维服务,知多少?
《QDebug 2022年7月》
『百日百题 · 基础篇』备战面试,坚持刷题 第四话——循环语句!
Cesium 修改鼠标样式
XSS线上靶场---Warmups
太香了! 阿里 Redis 速成笔记, 从头到尾全是精华!
现网设备兼容SRv6网络演进
gtk实现图片旋转
Pay from 0 to 1
6. XML