Laravel框架学习笔记之批量更新数据功能
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-24 11:13:02 浏览: 评论:0
这篇文章主要介绍了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) || emptyempty($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);
记录完赶紧干活去....
Tags: Laravel批量更新数据
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)