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程序设计有所帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容