Laravel一次更新多条记录,批量更新的方法
来源:互联网 发布:怎么查淘宝等级 编辑:程序博客网 时间:2024/05/16 13:54
在我们实际应用中,免不了这样的情况——例如我们同时录入多条信息,可能三条五条还好说,但量一旦变大,就会增加读写数据库的次数,会降低效率,那么,我们该如何实现,做到一次读写数据库,批量更新呢?
例如这种情况:
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;
- }
- }
阅读全文
0 0
- Laravel一次更新多条记录,批量更新的方法
- Laravel一次更新多条记录,批量更新的方法
- Laravel一次更新多条记录,批量更新的方法
- laravel批量更新多条记录
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql一次更新多条记录问题
- MySQL一次更新多条不同的记录
- mysql语句:批量更新多条记录
- mysql语句:批量更新多条记录的不同
- mysql语句:批量更新多条记录的不同值
- laravel上传并导入excel
- 论文写作心得之一
- C语言实现简单的电子通讯录
- 导弹力学分析_4
- ES知识点总结
- Laravel一次更新多条记录,批量更新的方法
- 归并排序
- 一、MongoDB的安装和配置
- 腾讯地图和百度地图的相互转换
- mysql操作查询结果case when then else end用法举例
- 函数的一些知识
- Laravel使用EasyWechat,3分钟完成微信APP支付
- 安装mysql
- win10系统u盘安装单个文件超过4g解决办法