当前位置:网站首页>关于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();
边栏推荐
- 15 years experience in software architect summary: in the field of ML, tread beginners, five hole
- 函数,递归以及dom简单操作
- XSS online shooting range---prompt
- 码率vs.分辨率,哪一个更重要?
- 距LiveVideoStackCon 2022 上海站开幕还有2天!
- 2022/08/03 学习笔记 (day23)多线程(补充)
- Zero trust, which has been popular for more than ten years, why can't it be implemented?
- 【历史上的今天】8 月 3 日:微软研究院的创始人诞生;陌陌正式上线;苹果发布 Newton OS
- 距LiveVideoStackCon 2022 上海站开幕还有3天!
- A. Color the Picture- Codeforces Round #810 (Div. 1)
猜你喜欢
Linux操作Jmeter(附带:关于连接上redis无法进行写入操作的问题),JMeter配置多用户进行压力测试
卷起来!阿里高工携 18 位高级架构师耗时 57 天整合的 1658 页面试总结
三年黑盒测试工程师对嵌入式软件测试的理解
《强化学习周刊》第56期:GraphIRL、REDEEMER & 眼科强化学习的潜在研究
《QDebug 2022年7月》
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---prompt
【kali-漏洞利用】(3.2)Metasploit基础(上):基础知识
今晚直播 | 8.2-8.4 与你聊聊开源与就业那些事!
YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响
随机推荐
STP生成树
解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
Engineering Effectiveness Governance for Agile Delivery
《QDebug 2022年7月》
XSS线上靶场---prompt
C. awoo‘s Favorite Problem--Educational Codeforces Round 130 (Rated for Div. 2)
LVS负载均衡集群
E - Swap
CAS: 773888-45-2_BIOTIN ALKYNE_生物素-炔基
IO thread process -> thread synchronization mutual exclusion mechanism -> day6
易基因|RNA m5C甲基化测序(RNA-BS)技术介绍
A. Color the Picture- Codeforces Round #810 (Div. 1)
461. 汉明距离
CAS:1620523-64-9_Azide-SS-biotin_生物素-二硫-叠氮
XSS线上靶场---haozi
软考系统分析师备考经验分享:论持久战
上课笔记(6)(1)——#629. 表达式括号匹配(stack)
CAS:1797415-74-7_TAMRA-Azide-PEG-Biotin
dataframe multi-level index replace index df.swaplevel(axis=1)