zoukankan      html  css  js  c++  java
  • Thinkphp 批量更新方法 saveALL

    批量更新只适用于一个字段的更新,原理是用自定义函数拼接sql语句,然后再执行sql语句.

      

    1. //数据
    2. $data[] = array('id'=>1,'value'=>value1);
    3. $data[] = array('id'=>2,'value'=>value2);
    4. $data[] = array('id'=>3,'value'=>value3);
    5. $this->saveAll($data,表名);

      

    1. //生成的sql语句结构
    2. UPDATE categories
    3.     SET display_order = CASE id
    4.         WHEN 1 THEN 3
    5.         WHEN 2 THEN 4
    6.         WHEN 3 THEN 5
    7.     END
    8. WHERE id IN (1,2,3)
    1. //批量更新
    2.     public function saveAll($datas,$model){
    3.         $model || $model=$this->name;
    4.         $sql   = ''; //Sql
    5.         $lists = []; //记录集$lists
    6.         $pk    = $this->getPk();//获取主键
    7.         foreach ($datas as $data) {
    8.             foreach ($data as $key=>$value) {
    9.                 if($pk===$key){
    10.                     $ids[]=$value;
    11.                 }else{
    12.                     $lists[$key].= sprintf("WHEN %u THEN '%s' ",$data[$pk],$value);
    13.                 }
    14.             }
    15.         }
    16.         foreach ($lists as $key => $value) {
    17.             $sql.= sprintf("`%s` = CASE `%s` %s END,",$key,$pk,$value);
    18.         }
    19.         $sql = sprintf('UPDATE __%s__ SET %s WHERE %s IN ( %s )',strtoupper($model),rtrim($sql,','),$pk,implode(',',$ids));
    20.         return M()->execute($sql);
    21.     }
  • 相关阅读:
    ##微信登陆,给大家分享一个第三方登陆
    ##Solr的各种版本下载
    ##redis在linux上的安装详解
    ##activeMq的简介与安装
    ##Springboot框架--配置文件介绍
    论面向服务架构及其应用
    MVC架构模式
    第八周总结
    细化架构阅读笔记
    第五周总结
  • 原文地址:https://www.cnblogs.com/jinshuo/p/8118886.html
Copyright © 2011-2022 走看看