当前位置:网站首页>关于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();
边栏推荐
- 《强化学习周刊》第56期:GraphIRL、REDEEMER & 眼科强化学习的潜在研究
- LitJson报错记录
- XSS holes emersion
- 反射机制
- LeetCode_Digit Statistics_Medium_400. Nth Digit
- Engineering Effectiveness Governance for Agile Delivery
- Unification of east-west and north-south communications
- dataframe 多层索引 更换索引 df.swaplevel(axis=1)
- 从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
- FVCOM三维水动力、水交换、溢油物质扩散及输运数值模拟丨FVCOM模型流域、海洋水环境数值模拟方法
猜你喜欢
IO线程进程->线程同步互斥机制->day6
CAS:1192802-98-4_UV 裂解的生物素-PEG2-叠氮
一体化HTAP数据库如此难,为什么他们还要做?
[kali-vulnerability exploitation] (3.2) Metasploit basics (on): basic knowledge
idea2021.1.3版本如何启动多个客户端程序
CAS:1797415-74-7_TAMRA-Azide-PEG-Biotin
函数,递归以及dom简单操作
现网设备兼容SRv6网络演进
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
如何使用 Jmeter获取登录token并设置为全局变量?
随机推荐
Unification of east-west and north-south communications
模板字符串
15 years experience in software architect summary: in the field of ML, tread beginners, five hole
XSS线上靶场---Warmups
Diazo Biotin-PEG3-DBCO|重氮化合物修饰生物素-三聚乙二醇-二苯并环辛炔
AI首席架构师13-AICA-智能文档分析技术在行业场景中的应用
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
函数,递归以及dom简单操作
Security Fundamentals 8 --- XSS
XSS练习---一次循环和两次循环问题
CAS:1260586-88-6_生物素-C5-叠氮_Biotin-C5-Azide
『百日百题 · 基础篇』备战面试,坚持刷题 第四话——循环语句!
template string
CAS:1620523-64-9_Azide-SS-biotin_生物素-二硫-叠氮
线程池的高级应用技巧核心解读
易基因:植物宏病毒组研究:植物病毒的进化与生态 | 顶刊综述
LyScript 实现应用层钩子扫描器
IDaaS 是什么?一文说清它的价值
研究Fabric中Etcd的Raft应用
[3D检测系列-PV-RCNN] PV-RCNN论文详解、PV-RCNN代码复现、包含官网PV-RCNN预训练权重及报错问题