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 xml-rpc远程调用
Dec 19 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 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
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
舞蹈教育学专业推荐信
2013/11/27 职场文书
军训自我鉴定200字
2014/02/13 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
司机岗位职责范本
2015/04/10 职场文书
成事在人观后感
2015/06/16 职场文书
2016特色励志班级口号
2015/12/24 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js