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 相关文章推荐
PHP中的类-什么叫类
Nov 20 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP的SQL注入过程分析
Jan 06 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
PHP Web表单生成器案例分析
Jun 02 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python中的pprint折腾记
2015/01/21 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python实现剪切功能
2019/01/23 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
十一个高级MySql面试题
2014/10/06 面试题
计算机专业推荐信范文
2013/11/20 职场文书
党员评议思想汇报
2014/10/08 职场文书
谢师宴邀请函
2015/02/02 职场文书
校车安全管理责任书
2015/05/11 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书