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

 更新时间:2019年05月30日 09:51:16   作者:Hubs''m  
这篇文章主要介绍了Laravel框架学习笔记之批量更新数据功能,结合实例形式分析了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框架FormRequest中重写错误处理的方法

    Laravel框架FormRequest中重写错误处理的方法

    这篇文章主要介绍了Laravel框架FormRequest中重写错误处理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • php导出csv文件,可导出前导0实例代码

    php导出csv文件,可导出前导0实例代码

    下面小编就为大家带来一篇php导出csv文件,可导出前导0实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Zend Framework教程之Zend_Registry对象用法分析

    Zend Framework教程之Zend_Registry对象用法分析

    这篇文章主要介绍了Zend Framework教程之Zend_Registry对象用法,结合实例形式分析了对象注册表Zend_Registry的具体功能与相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • php获取数据库结果集方法(推荐)

    php获取数据库结果集方法(推荐)

    下面小编就为大家带来一篇php获取数据库结果集方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • PHP中单双号与变量

    PHP中单双号与变量

    这篇文章主要介绍了PHP中单双号与变量的相关资料,本文实例代码结合文字说明,给大家介绍的非常详细,需要的朋友参考下
    2018-03-03
  • 使用tp框架和SQL语句查询数据表中的某字段包含某值

    使用tp框架和SQL语句查询数据表中的某字段包含某值

    今天小编就为大家分享一篇使用tp框架和SQL语句查询数据表中的某字段包含某值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Yii使用DbTarget实现日志功能的示例代码

    Yii使用DbTarget实现日志功能的示例代码

    这篇文章主要介绍了Yii使用DbTarget实现日志功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • thinkphp的钩子的两种配置和两种调用方法

    thinkphp的钩子的两种配置和两种调用方法

    这篇文章主要介绍了thinkphp的钩子的两种配置和两种调用方法,实例讲解的很清晰,有不懂的同学可以学习下
    2021-02-02
  • ThinkPHP3.1.x修改成功与失败跳转页面的方法

    ThinkPHP3.1.x修改成功与失败跳转页面的方法

    这篇文章主要介绍了ThinkPHP3.1.x修改成功与失败跳转页面的方法,涉及thinkPHP底层源文件中相关跳转代码的设置与修改操作技巧,需要的朋友可以参考下
    2017-09-09
  • Laravel 连接(Join)示例

    Laravel 连接(Join)示例

    今天小编就为大家分享一篇Laravel 连接(Join)示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10

最新评论