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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP临时文件的安全性分析
Jul 04 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP实现小偷程序实例
Oct 31 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
PHP工厂模式的日常使用
Mar 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
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
Javascript 对象的解释
2008/11/24 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
python 文件与目录操作
2008/12/24 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
python实现用户答题功能
2018/01/17 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
python3中rank函数的用法
2019/11/27 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
新学期红领巾广播稿
2014/01/14 职场文书
大学生校园创业计划书
2014/02/08 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
最美家庭活动方案
2014/08/31 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书