当前位置:网站首页>Laravel DB批量更新的方法
Laravel DB批量更新的方法
2022-08-09 18:37:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
1.1 事例数据:
$multipleData = array(
array(
'from_plat_skuid' => 1022016 ,
'sku_storage_num' => 100
),
array(
'from_plat_skuid' => 1205019 ,
'sku_storage_num' => 100
)
);
处理方法:
//同时更新多个记录
public function updateBatch($tableName = "", $multipleData = array()){
if( $tableName && !empty($multipleData) ) {
// column or fields to update
$updateColumn = array_keys($multipleData[0]);
$referenceColumn = $updateColumn[0]; //e.g id
unset($updateColumn[0]);
$whereIn = "";
$q = "UPDATE ".$tableName." SET ";
foreach ( $updateColumn as $uColumn ) {
$q .= $uColumn." = CASE ";
foreach( $multipleData as $data ) {
$q .= "WHEN ".$referenceColumn." = ".$data[$referenceColumn]." THEN '".$data[$uColumn]."' ";
}
$q .= "ELSE ".$uColumn." END, ";
}
foreach( $multipleData as $data ) {
$whereIn .= "'".$data[$referenceColumn]."', ";
}
$q = rtrim($q, ", ")." WHERE ".$referenceColumn." IN (". rtrim($whereIn, ', ').")";
// Update
return DB::update(DB::raw($q));
} else {
return false;
}
}
sql事例语句:
UPDATE table_name SET col_1_name = CASE
WHEN id = '1' THEN 'col_1_value'
WHEN id = '2' THEN 'col_1_value'
ELSE col_1_name END,
col_2_name = CASE
WHEN id = '1' THEN 'col_2_value'
WHEN id = '2' THEN 'col_2_value'
ELSE col_2_name END
WHERE id IN('1','2')
注:这样做效率会有一个大的提升。
2.1 replace into 批量更新
replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个清空大量数据。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105893.html原文链接:https://javaforall.cn
边栏推荐
- Queue topic: Implementing stacks with queues
- IDEA快捷代码实时模板
- Iptables防火墙常见的典型应用场景
- Environment: Flink version: 1.15.1 jar package: flink-sql-connector-oracle
- Samsung's flagship discount is 1,800, Apple's discount is over 1,000, and the domestic flagship is only reduced by 500 to send beggars
- AWS CodePipeLine 跨账号部署ECS
- [Free column] Xposed plug-in development for Android security [from scratch] tutorial
- 放下手机吧:实验表明花20分钟思考和上网冲浪同样快乐
- 网络安全:常见的网络协议
- [免费专栏] Android安全之Android工程模式
猜你喜欢
基于CC2530 E18-MS1-PCB Zigbee DIY作品(三)
C#/VB.NET: Extract text and pictures from PowerPoint document
How to stop the test after reaching a given number of errors during stress testing in JMeter
[免费专栏] Android安全之Android Fragment注入
听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!
明明加了唯一索引,为什么还是产生重复数据?
WPF 实现带蒙版的 MessageBox 消息提示框
VIT transformer详解
shell之变量详解,让你秒懂!
Samsung's flagship discount is 1,800, Apple's discount is over 1,000, and the domestic flagship is only reduced by 500 to send beggars
随机推荐
重庆智博会|2022智博会到底有哪些看点?拭目以待
ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
Iptables防火墙常见的典型应用场景
Go-Excelize API源码阅读(五)—— Close()
Haven't tried line art videos this year??
[Free Column] Android Security for Peace Elite (FZ) APK Reverse Analysis
[免费专栏] Android安全之Xposed插件开发【从零手把手带】教程
AWK使用
华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款
IDEA快捷代码实时模板
Openharmony Lightweight System Experiment--GPIO Lighting
2022.08.08_每日一题
《痞子衡嵌入式半月刊》 第 60 期
Fully automated machine learning modeling!The effect hangs the primary alchemist!
Flume (五) --------- 自定义 Interceptor、自定义 Source 与 自定义 Sink
[免费专栏] Android安全之Android Studion 动态调试APK的两种方法
如何抑制告警风暴?
NetCore路由的Endpoint模式
qq机器人账号不能发送群消息,被风控
Qt 5.12 LTS 部署