Laravel框架学习笔记之批量更新数据功能


Posted in PHP onMay 30, 2019

本文实例讲述了Laravel框架批量更新数据功能。分享给大家供大家参考,具体如下:

前言

上周公司的比赛项目以泪奔结束...一台2核4G的VPS完全蹦了..集体被老大叼杠。下个月的比赛又要开始了,所以现在抓紧时间升级服务器,优化代码与SQL,刚看到排名那有1000多条更新语句,太受不了了,所以在google找了下资源,找到了批量更新数据的方法,记录一下。

代码

//from https://github.com/mavinoo/laravelBatch
static function batchUpdate($model, array $values, $index = null){
  $final = [];
  $ids = [];
  if (!count($values)) {
    return false;
  }
  if (!isset($index) || empty($index)) {
    $index = $model->getKeyName();
  }
  foreach ($values as $key => $val) {
    $ids[] = $val[$index];
    foreach (array_keys($val) as $field) {
      if ($field !== $index) {
        $value = (is_null($val[$field]) ? 'NULL' : '"' . self::mysql_escape($val[$field]) . '"');
        $final[$field][] = 'WHEN `' . $index . '` = "' . $val[$index] . '" THEN ' . $value . ' ';
      }
    }
  }
  $cases = '';
  foreach ($final as $k => $v) {
    $cases .= '`' . $k . '` = (CASE ' . implode("\n", $v) . "\n"
      . 'ELSE `' . $k . '` END), ';
  }
  $full_table     =  $model->getConnection()->getTablePrefix() . $model->getTable();
  $query = "UPDATE `" .$full_table . "` SET " . substr($cases, 0, -2) . " WHERE `$index` IN(" . '"' . implode('","', $ids) . '"' . ");";
  \DB::update($query);
  #return $this->db->connection($this->getConnectionName($table))->update($query);
}

测试代码如下

$userInstance = new User();
$value = [
  [
    'id' => 2,
    'contest_name' => 'A1',
    'project_name' => 'P1'
  ] ,
  [
    'id' => 3,
    'contest_name' => 'A2',
    'project_name' => 'P2'
  ] ,
];
$index = 'id';
Utils::batchUpdate($userInstance, $value, $index);

记录完赶紧干活去....

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
PHP 实现多服务器共享 SESSION 数据
Aug 15 PHP
php获取目标函数执行时间示例
Mar 04 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
thinkphp常见路径用法分析
Dec 02 PHP
php获取json数据所有的节点路径
May 17 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 #PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 #PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 #PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 #PHP
PHP微信网页授权的配置文件操作分析
May 29 #PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 #PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 #PHP
You might like
php 数组二分法查找函数代码
2010/02/16 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
微信小程序签到功能
2018/10/31 Javascript
python实现排序算法
2014/02/14 Python
python检测某个变量是否有定义的方法
2015/05/20 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
extern是什么意思
2016/03/10 面试题
大学生个人求职信范文
2013/09/21 职场文书
大学生就业自荐信
2013/10/26 职场文书
晚归检讨书
2014/02/19 职场文书
考试保密承诺书
2014/08/30 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
顶岗实习协议书
2015/01/29 职场文书
介绍信样本
2015/01/31 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书