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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
简单的PHP留言本实例代码
May 09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
php base64 编码与解码实例代码
Mar 21 PHP
Laravel实现表单提交
May 07 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
jQuery的animate函数学习记录
2014/08/08 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
分公司经理任命书
2014/06/05 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
2015元旦感言
2015/12/09 职场文书