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开发大型项目的一点经验
Oct 09 PHP
通过html表格发电子邮件
Oct 09 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP实现图片压缩的两则实例
Jul 19 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
CodeIgniter常用知识点小结
May 26 PHP
php格式化时间戳
Dec 17 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
详解Python匿名函数(lambda函数)
2019/04/19 Python
Pandas分组与排序的实现
2019/07/23 Python
Python中关于浮点数的冷知识
2019/09/22 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
见习报告的格式
2014/11/04 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
收入证明申请书
2015/06/12 职场文书
房屋所有权证明
2015/06/19 职场文书
中学图书馆工作总结
2015/08/11 职场文书