当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-24 11:13:02 浏览: 评论:0 

这篇文章主要介绍了Laravel框架学习笔记之批量更新数据功能,结合实例形式分析了Laravel框架批量更新数据的相关模型定义与使用操作技巧,需要的朋友可以参考下。

本文实例讲述了Laravel框架批量更新数据功能,分享给大家供大家参考,具体如下:

前言

上周公司的比赛项目以泪奔结束...一台2核4G的VPS完全蹦了..集体被老大叼杠。下个月的比赛又要开始了,所以现在抓紧时间升级服务器,优化代码与SQL,刚看到排名那有1000多条更新语句,太受不了了,所以在google找了下资源,找到了批量更新数据的方法,记录一下。

代码:

  1. //from https://github.com/mavinoo/laravelBatch 
  2. static function batchUpdate($modelarray $values$index = null){ 
  3.   $final = []; 
  4.   $ids = []; 
  5.   if (!count($values)) { 
  6.     return false; 
  7.   } 
  8.   if (!isset($index) || emptyempty($index)) { 
  9.     $index = $model->getKeyName(); 
  10.   } 
  11.   foreach ($values as $key => $val) { 
  12.     $ids[] = $val[$index]; 
  13.     foreach (array_keys($valas $field) { 
  14.       if ($field !== $index) { 
  15.         $value = (is_null($val[$field]) ? 'NULL' : '"' . self::mysql_escape($val[$field]) . '"'); 
  16.         $final[$field][] = 'WHEN `' . $index . '` = "' . $val[$index] . '" THEN ' . $value . ' '
  17.       } 
  18.     } 
  19.   } 
  20.   $cases = ''
  21.   foreach ($final as $k => $v) { 
  22.     $cases .= '`' . $k . '` = (CASE ' . implode("\n"$v) . "\n" 
  23.       . 'ELSE `' . $k . '` END), '
  24.   } 
  25.   $full_table     =  $model->getConnection()->getTablePrefix() . $model->getTable(); 
  26.   $query = "UPDATE `" .$full_table . "` SET " . substr($cases, 0, -2) . " WHERE `$index` IN(" . '"' . implode('","'$ids) . '"' . ");"
  27.   \DB::update($query); 
  28.   #return $this->db->connection($this->getConnectionName($table))->update($query); 

测试代码如下

  1. $userInstance = new User(); 
  2. $value = [ 
  3.   [ 
  4.     'id' => 2, 
  5.     'contest_name' => 'A1'
  6.     'project_name' => 'P1' 
  7.   ] , 
  8.   [ 
  9.     'id' => 3, 
  10.     'contest_name' => 'A2'
  11.     'project_name' => 'P2' 
  12.   ] , 
  13. ]; 
  14. $index = 'id'
  15. Utils::batchUpdate($userInstance$value$index); 

记录完赶紧干活去....

Tags: Laravel批量更新数据

分享到: