Laravel框架学习笔记之批量更新数据功能

来源:脚本之家  责任编辑:小易  

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

您可能感兴趣的文章:


  • 本文相关:
  • laravel 批量更新多条数据的示例
  • laravel实现批量更新多条记录的方法示例
  • laravel框架实现的批量删除功能示例
  • laravel中批量赋值mass-assignment的真正含义详解
  • laravel框架数据库curd操作、连贯操作总结
  • php开发框架laravel数据库操作方法总结
  • laravel 5框架学习之向视图传送数据
  • laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
  • laravel 5框架学习之向视图传送数据(进阶篇)
  • laravel接收前端ajax传来的数据的实例代码
  • laravel中数据迁移与数据填充的详细步骤
  • laravel 的数据库迁移的方法
  • php自定义的格式化时间示例代码
  • php教程之魔术方法的使用示例(php魔术函数)
  • php 二维数组快速排序算法的实现代码
  • thinkphp模版中导入css和js文件的方法
  • laravel中基于artisan view扩展包创建及删除应用视图文件的方法
  • 100多行php代码实现socks5代理服务器[2]
  • 从零开始学yii2框架(六)高级应用程序模板
  • php计算程序运行时间的简单例子分享
  • smarty内部日期函数html_select_date()用法实例分析
  • php微信分享开发详解
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved