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 反向排序和随机排序代码
Jun 30 PHP
浅析is_writable的php实现
Jun 18 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php远程下载类分享
Apr 13 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python 实现归并排序算法
2012/06/05 Python
python排序方法实例分析
2015/04/30 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
python使用zip将list转为json的方法
2018/12/31 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
公司新员工欢迎词
2015/09/30 职场文书
靠谱的活动总结
2019/04/16 职场文书