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.ini中文版(1)
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php获取网页请求状态程序示例
Jun 17 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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
PHP5 安装方法
2007/01/15 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
用jquery来定位
2007/02/20 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
a标签调用js的方法总结
2019/09/05 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
银行学习十八大感想
2014/01/11 职场文书
爱祖国演讲稿
2014/05/04 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
python基础之停用词过滤详解
2021/04/21 Python