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 array_flip() 删除重复数组元素专用函数
May 16 PHP
PHP中文件上传的一个问题
Sep 04 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
php中require和require_once的区别说明
Feb 27 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php防止sql注入简单分析
Mar 18 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
PHP简单实现无限级分类的方法
May 13 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 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来实现网络服务
2009/09/15 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
js获取div高度的代码
2008/08/09 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python与R语言的简要对比
2017/11/14 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
数据库的约束含义
2012/09/09 面试题
教师党员思想汇报
2014/01/06 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
租房协议书范例
2014/10/14 职场文书
诉讼授权委托书
2014/10/15 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
深入理解go slice结构
2021/09/15 Golang
改造DE1103三步曲
2022/04/07 无线电