Laravel一次更新多条记录,批量更新的方法
来源:互联网 发布:中国社交软件 编辑:程序博客网 时间:2024/05/07 10:40
在我们实际应用中,免不了这样的情况——例如我们同时录入多条信息,可能三条五条还好说,但量一旦变大,就会增加读写数据库的次数,会降低效率,那么,我们该如何实现,做到一次读写数据库,批量更新呢?
例如这种情况:
HTML代码:
<!doctype html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><form action="/enroll/complete_order_store" method='post'>{!!csrf_field()!!}@foreach($seats as $s) //多个座位信息,每个都有他的ID<br><br><br>座位号:{{$s->id}}({{$s->rows.'排'.$s->cols.'座'}})<input type="hidden" name="id{{$s->id}}" value='{{$s->id}}'><br>姓名:<input type="text" name="name{{$s->id}}" id="" value='{{$s->name}}'> //为了区别不同ID提交的不同name,所以在name后面加上了ID<br>手机:<input type="text" name="mobile{{$s->id}}" id="" value='{{$s->mobile}}'><br>学校/单位:<input type="text" name="school{{$s->id}}" id="" value='{{$s->school}}'><br>电子邮箱:<input type="text" name="email{{$s->id}}" id="" value='{{$s->email}}'><br>是否需要发票: 是<input type="radio" name="is_bill{{$s->id}}" value='1' {{$s->is_bill == 1?'checked':''}}>否<input type="radio" name="is_bill{{$s->id}}" value='0' {{$s->is_bill == 0?'checked':''}}><br>地址:<input type="text" name="address{{$s->id}}" id="" value='{{$s->address}}'><br>邮编:<input type="text" name="post_code{{$s->id}}" id="" value='{{$s->post_code}}'>@endforeach<input type="hidden" name="ids" value='{{$ids}}'> //这里ids是把所有id拼接成带逗号的字符串,例如 1,2,3<input type="submit" value="OK"></form></body></html>
//test data/*$multipleData = array( array( 'id' => 'My id' , 'name' => 'My Name 2' , 'date' => 'My date 2' ), array( 'id' => 'Another id' , 'name' => 'Another Name 2' , 'date' => 'Another date 2' ))*/
public function completeOrderStore(Request $request){ $ids = Input::get('ids'); //拿到逗号分隔的字符串,然后把他们变成数组 $arr = explode(',', $ids); $multipleData = []; foreach($arr as $a){ //组成例子那样的数组 $multipleData[] = ['id'=>$a, 'name'=>Input::get('name'.$a), 'mobile'=>Input::get('mobile'.$a), 'school'=>Input::get('school'.$a), 'email'=>Input::get('email'.$a), 'is_bill'=>Input::get('is_bill'.$a), 'address'=>Input::get('address'.$a), 'post_code'=>Input::get('post_code'.$a) ]; } $res = $this->updateBatch('seats',$multipleData); return Redirect::to('/enroll/myorder'); }
//同时更新多个记录,参数,表名,数组(别忘了在一开始use DB;) public function updateBatch($tableName = "", $multipleData = array()){ if( $tableName && !empty($multipleData) ) { // column or fields to update $updateColumn = array_keys($multipleData[0]); $referenceColumn = $updateColumn[0]; //e.g id unset($updateColumn[0]); $whereIn = ""; $q = "UPDATE ".$tableName." SET "; foreach ( $updateColumn as $uColumn ) { $q .= $uColumn." = CASE "; foreach( $multipleData as $data ) { $q .= "WHEN ".$referenceColumn." = ".$data[$referenceColumn]." THEN '".$data[$uColumn]."' "; } $q .= "ELSE ".$uColumn." END, "; } foreach( $multipleData as $data ) { $whereIn .= "'".$data[$referenceColumn]."', "; } $q = rtrim($q, ", ")." WHERE ".$referenceColumn." IN (". rtrim($whereIn, ', ').")"; // Update return DB::update(DB::raw($q)); } else { return false; } }
1 0
- Laravel一次更新多条记录,批量更新的方法
- Laravel一次更新多条记录,批量更新的方法
- Laravel一次更新多条记录,批量更新的方法
- laravel批量更新多条记录
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql一次更新多条记录问题
- MySQL一次更新多条不同的记录
- mysql语句:批量更新多条记录
- mysql语句:批量更新多条记录的不同
- mysql语句:批量更新多条记录的不同值
- Linux 文件基本属性
- declare-styleable中format详解
- 浅谈汽车CAN/LIN总线测试流程和测试工具
- 机智云在Amazon Alexa平台发布Smarthome和Custom Skill,实现亚马逊Echo直接控制Gokit
- 商场“买八送一”
- Laravel一次更新多条记录,批量更新的方法
- 在android studio中配置签名文件(keystore)的路径
- 《Java高并发程序设计》学习 --6.6 读写锁的改进:StampedLock
- 为何SEO大神都不敢经常改动KTD标签,原因都在这里
- 【Leetcode513 Find Bottom left Tree Value】树的遍历
- 从U盘重新安装win10系统
- java 基础知识巩固(一)
- 1014. 福尔摩斯的约会 (20)
- Java并发编程:Synchronized及其实现原理