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,如果更新的字段不全会将缺失的字段置为缺省值,用这个清空大量数据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105893.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 排序二叉树-删除节点

    排序二叉树-删除节点前面(https://blog.csdn.net/jsjsjs1789/article/details/106772632),我们已经了解了什么是排序二叉树以及排序二叉树的遍历和添加元素,现在我们一起来看一下,排序二叉树是如何删除元素的。packagexmht.datastructuresandalgorithms.datastructure.binarysortTree;/***@authorshengjk1*@date2020/6/15*/publicclassB

  • Android中的layout_gravity和gravity的区别[通俗易懂]

    Android中的layout_gravity和gravity的区别[通俗易懂]在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity。按照字面意思来说,layout_gravity就是相对于layout来设置的。

  • 5g切片技术详解_5G切片SLA

    5g切片技术详解_5G切片SLA网络切片是5G网络的关键特征,可以在共享的基础设施上构建专用的逻辑网络。5G网络切片代表了一种网络架构,它允许独立和虚拟化的逻辑网络复用同一个物理网络基础设施。每个切片都是一个独立的端到端网络,以满足特定应用程序的各种需求。其实,切片在5G中并不是一个新概念,在4G中也存在(例如,APN、MORAN和GWCN),但其能力有限,因为它们不像在5G中那样支持完整的端到端解决方案。简单起见,假设运营商网络是一块大蛋糕,我们将其分成几片。每片包含整个网络的一部分,包括无线网络、传输网络和核心网络。此外,。。…

  • sublime text 3下载与安装详细教程「建议收藏」

    sublime text 3下载与安装详细教程「建议收藏」一、下载:打开官网下载链接http://www.sublimetext.com/3,下载SublimeText3portableversion”下载下来为“SublimeTextBuild3083x64.zip”编辑器的包,解压后无需安装就能运行,直接创建桌面快捷键就好二、双击桌面“SublimeText3”快捷图标,打开程序,就可…

  • char *string=”xxxxxxxxx” 与 char string[]=”xxxxx”的区别

    char *string=”xxxxxxxxx” 与 char string[]=”xxxxx”的区别char*string=”xxxxxx“这种方式使用的字面值模式,只读,不可以修改。string是个指针,这个字符串存放在程序的RODATA(read-only)段,不能修改的!表示你定义了一个字符指针,这个指针指向一个字符串常量,既然是常量那么通过这个指针修改这个常量是不可以的。charstring[]=”xxxxx”这种方式,字符串存储在数组

  • Ubuntu中搭建ICE服务器(Coturn)

    Ubuntu中搭建ICE服务器(Coturn)1.WebRTC的P2P穿透WebRTC的P2P穿透部分是由libjingle实现的.步骤顺序大概是这样的:尝试直连.通过STUN服务器进行穿透无法穿透则通过TURN服务器中转STUN服务器比较简单.网上也有很多公开的STUN服务器可以用于测试,例如:stun.ideasip.com在WebRTC的P2P应用中,使用公开的STUN服务器时,有时响应比较慢,这就需要自己搭一个…

发表回复

您的电子邮箱地址不会被公开。

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