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中文件下载功能实现超详细流程分析
Jun 13 PHP
php中的一些数组排序方法分享
Jul 20 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
php中stdClass的用法分析
Feb 27 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 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 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
JavaScript实现消消乐的源代码
2021/01/12 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
Pytorch释放显存占用方式
2020/01/13 Python
Python类继承和多态原理解析
2020/02/05 Python
酒店前厅员工辞职信
2014/01/08 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
委托书范本
2014/04/02 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
中队活动总结
2014/08/27 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
党建工作汇报材料
2014/12/24 职场文书
义诊活动通知
2015/04/24 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
正规欠条模板
2015/07/03 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
汽车车尾标语大全
2015/08/11 职场文书
创业计划书之餐饮
2019/09/02 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS