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面向对象的方法重载两种版本比较
Sep 08 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
详解PHP实现执行定时任务
Dec 21 PHP
php文件缓存方法总结
Mar 16 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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函数file_get_contents超时处理的方法详解
2013/06/03 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python的依赖管理的实现
2019/05/14 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
人力资源部经理岗位职责规定
2014/02/23 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
离婚协议书怎么写
2015/01/26 职场文书
公司捐书倡议书
2015/04/27 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL