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
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
php引用返回与取消引用的详解
Jun 08 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
基于vuex实现购物车功能
2021/01/10 Vue.js
Python新手实现2048小游戏
2015/03/31 Python
Python 探针的实现原理
2016/04/23 Python
Python实现简单的四则运算计算器
2016/11/02 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
运动会通讯稿200字
2014/02/16 职场文书
财务主管岗位职责
2014/02/28 职场文书
六一儿童节标语
2014/10/08 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
mysql left join快速转inner join的过程
2021/06/30 MySQL