Laravel DB批量更新的方法

Laravel DB批量更新的方法Laravel DB批量更新的方法

大家好,又见面了,我是你们的朋友全栈君。

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.net/105893.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月24日 下午2:40
下一篇 2022年4月24日 下午2:40


相关推荐

  • java 常量表达式,需要常量表达式? (Java switch语句)[通俗易懂]

    java 常量表达式,需要常量表达式? (Java switch语句)[通俗易懂]Ihavenoideawhatiscausingthiserror.MyteacherandIwentoveritandcouldn’tfindwhatwaswrong.importjava.util.Scanner;publicclassMailAssignment{publicstaticvoidmain(String[]args){S…

    2026年4月18日
    5
  • 每天一道算法_2_求高精度幂

    今天这个可能有点偷懒,学c++的时候就知道大数计算很复杂,现在一直用java,有幸有大数的方法可以用那么今天的算法就用java偷懒过去吧Description对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 现在要你解决的问题是:对一个实数R( 0.0 n),其中n 是整数并且 0 InputT输入包括多组 R 和 n。

    2022年3月10日
    43
  • BERT模型实战之多文本分类(附源码)

    BERT模型实战之多文本分类(附源码)写在前面BERT模型也出来很久了,之前看了论文学习过它的大致模型(可以参考前些日子写的笔记NLP大杀器BERT模型解读),但是一直有杂七杂八的事拖着没有具体去实现过真实效果如何。今天就趁机来动手写一写实战,顺便复现一下之前的内容。这篇文章的内容还是以比较简单文本分类任务入手,数据集选取的是新浪新闻cnews,包括了[‘体育’,‘财经’,‘房产’,‘家居’,‘教育’,‘科技’,‘时尚’…

    2022年6月10日
    158
  • 递归算法时间复杂度和空间复杂度分析与举例

    递归算法时间复杂度和空间复杂度分析与举例文章目录前言 1 递归算法性能分析公式 1 1 时间复杂度计算公式 1 2 空间复杂度计算公式 1 3 例子 1 3 1 暴力算法 1 3 2 递归算法 1 3 3 优化递归算法总结前言根据代码随想录博主整理的主要是为了记录递归算法如何分析其性能 并如何根据其性能来优化递归算法 1 递归算法性能分析公式 1 1 时间复杂度计算公式递归算法的时间复杂度 递归的次数 每次递归的时间复杂度 1 2 空间复杂度计算公式递归算法的空间复杂度 递归的深度 每次递归的空间复杂度 1 3 例子计算

    2026年3月18日
    1
  • Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决「建议收藏」

    Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决「建议收藏」环境:Ubuntu18.04-amd64问题描述:在ubuntu下安装mysql时,进行apt-get操作,出现了如下报错:参考了一篇博客,已经解决问题。现将步骤记录下来。解决办法:第一种情况: 进程中存在与apt相关的正在运行的进程: 首先检查是否在运行apt,apt-get相关的进程psaux|grep-iapt如果存在与apt相关的正在运行的进程…

    2022年10月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号