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中SQL注入攻击与XSS攻击
Jun 10 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
PHP中命名空间的使用例子
Mar 22 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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
建立动态的WML站点(二)
2006/10/09 PHP
php中文本操作的类
2007/03/17 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
WebPack基础知识详解
2017/01/16 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
Django中几种重定向方法
2015/04/28 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
Python 下载及安装详细步骤
2019/11/04 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
python opencv实现简易画图板
2020/08/27 Python
Python进行特征提取的示例代码
2020/10/15 Python
is_file和file_exists效率比较
2021/03/14 PHP
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
vue+django实现下载文件的示例
2021/03/24 Vue.js
护理医院见习报告
2014/11/03 职场文书
2014年基建工作总结
2014/12/12 职场文书