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 相关文章推荐
生成缩略图
Oct 09 PHP
操作Oracle的php类
Oct 09 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
JS实现php的伪分页
May 25 PHP
php中大括号作用介绍
Mar 22 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
php封装的mysqli类完整实例
Oct 18 PHP
php数组指针操作详解
Feb 14 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 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
Yii框架form表单用法实例
2014/12/04 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
Vue实现日历小插件
2019/06/26 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
Python实现的简单万年历例子分享
2014/04/25 Python
Python中方法链的使用方法
2016/02/23 Python
Python用threading实现多线程详解
2017/02/03 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
运动会闭幕式解说词
2014/02/21 职场文书
班级体育活动总结
2014/07/05 职场文书
客房部经理岗位职责
2015/02/02 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers