php教程

超轻量级php框架startmvc

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

更新时间:2020-04-05 14:02:50 作者:startmvc
本文实例讲述了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 批量更新数据