当前位置:网站首页>关于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();
边栏推荐
- 距LiveVideoStackCon 2022 上海站开幕还有2天!
- Zero trust, which has been popular for more than ten years, why can't it be implemented?
- 这几个常用 alias,带你高效做事(下)
- 函数,递归以及dom简单操作
- From September 1st, my country has granted zero-tariff treatment to 98% of tax items from 16 countries including Togo
- 9月1日起我国给予多哥等16国98%税目产品零关税待遇
- 卷起来!阿里高工携 18 位高级架构师耗时 57 天整合的 1658 页面试总结
- gtk实现图片旋转
- Engineering Effectiveness Governance for Agile Delivery
- CAS:908007-17-0_Biotin-azide_Biotin azide
猜你喜欢

线程池的高级应用技巧核心解读

15 years experience in software architect summary: in the field of ML, tread beginners, five hole

YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响

shell编程基础

图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门

Interesting opencv - record image binarization and similarity

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

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

今晚直播 | 8.2-8.4 与你聊聊开源与就业那些事!

XSS线上靶场---haozi
随机推荐
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
XSS漏洞复现
Interesting opencv - record image binarization and similarity
FVCOM三维水动力、水交换、溢油物质扩散及输运数值模拟丨FVCOM模型流域、海洋水环境数值模拟方法
CAS:1192802-98-4_UV 裂解的生物素-PEG2-叠氮
CAS:1620523-64-9_Azide-SS-biotin_生物素-二硫-叠氮
PyCharm function automatically add comments without parameters
跨端开发技术储备记录
IO thread process -> thread synchronization mutual exclusion mechanism -> day6
D - Project Planning--二分
AI首席架构师13-AICA-智能文档分析技术在行业场景中的应用
Orcad Capture Cadence 新建原理图多部分smybol和Homogeneous、Heterogeneous类型介绍教程
[kali-vulnerability scanning] (2.1) Nessus download and installation (on)
尚医通项目总结
What is the role and difference between buildscript and allprojects?
回忆三年浮沉
CAS:122567-66-2_DSPE-生物素_DSPE-Biotin
How to deal with commas in the content of the CSV file of the system operation and maintenance series
tidyverse based on data.table?
函数,递归以及dom简单操作