public function houseimport(Request $request){ //laravel excel的两种写法之一,注意作用域链 $data = Excel::load($request->file('excel'), function($reader) {})->get()->toArray(); //exce1表格中$ch_arr商品序号不能为空 $sh_array = array(); foreach ($data[0] as $ite){ reset($ite); $first=current($ite); array_push($sh_array,$first); } //循环遍历第一项是否为空 foreach($sh_array as $v) { if (empty($v)) { return response()->json(['status' => 0, 'msg' => '该excel导入rfid码对应的表格不能为空']); } } $ch_array = array(); foreach ($data[0] as $item){ foreach ($item as $value){ array_push($ch_array,$value); } } //判断导入的数据是非有重复值 if (count($ch_array) != count(array_unique($ch_array))) { return response()->json(['status'=>0,'msg'=>'该导入数组有重复值']); } // dd($ch_array); //导入的数据与数据库的数据是否重复 $warehouses= RfidWarehouse::where('rfid','=',$ch_array[0])->first(); if($warehouses){ return response()->json(['status'=>0,'msg'=>'导入失败,rfid码重复']); } foreach ($data as $value) {//循环sheet if(!empty($value)){ $titleArr = array_keys($value[0]); //判断表头的数据是非正确,防止其他文件的导入 if($titleArr[0] != 'rfid码'){ return response()->json(['status'=>0,'msg'=>'导入失败']); } } //数据通过models传到数据库中 foreach($value as $rfidData){ RfidWarehouse::create([ 'rfid'=>$rfidData['rfid码'] ]); } } return ['status'=>1,'msg'=>'导入成功']; }
view
<form action="" method="post" enctype="multipart/form-data" id="formlist"> {{csrf_field()}} <input type="file" name="excel" value="" οnchange="fileupload()" multiple="multiple"> </form>ajax 注意要导入 jquery-form.js 与 layer插件
<script> //rfid仓库信息异步导入 function fileupload(){ $('#formlist').ajaxSubmit({ url:'/admin/rfidmanage/houseimport',//ajax请求的方法 dataType:'json', type:'post', data:$('#formlist').fieldSerialize(), success:function(res){ if (res.status == 0) { layer.msg(res.msg); } else { layer.msg(res.msg, {icon: 1}, function () { location.href = '/admin/rfidmanage/warehouse';//返回传参数的页面,200 }); }; }数组元素的取值,取第一个字段的值不为空, 再取二三字段的值不能够重复
$data = Excel::load($request->file('excel'), function($reader) {})->get()->toArray(); //商品分类不能为空 $ch_array = array(); foreach ($data[0] as $item){ reset($item); $first=current($item); array_push($ch_array, $first); } foreach($ch_array as $v) { if (empty($v)) { return response()->json(['status' => 0, 'msg' => '商品分类不能为空']); } } // 声明数组的一些对应数据库的字段不能为重复值 $sh_array=array(); foreach ($data[0] as $iten){ reset($iten); current($iten); $second=next($iten); $third=next($iten); array_push($sh_array,$second,$third); } if (count($sh_array) != count(array_unique($sh_array))) { return response()->json(['status'=>0,'msg'=>'该导入的商品名称或者商品信息有误']); }
//判断导入的数据是否与数据库有重复的值 $houses= Goods::where('name','=',$sh_array[0])->first(); if($houses){ return response()->json(['status'=>0,'msg'=>'导入失败,商品名称数据重复']); } $infos= Goods::where('goods_info','=',$sh_array[1])->first(); if($infos){ return response()->json(['status'=>0,'msg'=>'导入失败,商品信息数据重复']); }
//判断表头的数据是非正确,防止其他文件的导入 foreach ($data as $value) {//循环sheet if(!empty($value)){ $titleArr = array_keys($value[0]); //判断表头的数据是非正确,防止其他文件的导入 //只取值前四项 if($titleArr[0] != '商品分类的id'){ return response()->json(['status'=>0,'msg'=>'导入失败']); } if($titleArr[1] != '商品名称'){ return response()->json(['status'=>0,'msg'=>'导入失败']); } if($titleArr[2] != '商品信息'){ return response()->json(['status'=>0,'msg'=>'导入失败']); } if($titleArr[3] != '商品图片'){ return response()->json(['status'=>0,'msg'=>'导入失败']); } } //数据通过models传到数据库中 foreach($value as $rfidData){ Goods::create([ 'class_id' => $rfidData['商品分类的id'], 'name' => $rfidData['商品名称'], 'goods_info' => $rfidData['商品信息'], 'img' => $rfidData['商品图片'], 'goods_num' => $rfidData['商品数量'], 'product_code' => $rfidData['商品编号'], 'site' => $rfidData['产址'], 'work_company' => $rfidData['加工企业'], 'productdate' => $rfidData['保质期'], 'area' => $rfidData['产地'], 'price' => $rfidData['单价'], 'product_at' => $rfidData['生产日期'], ]); } } return ['status'=>1,'msg'=>'导入成功'];
注意区别:
1,
判断导入的数据是否与数据库有重复的值
//判断导入的数据是否与数据库有重复的值 $houses= Goods::where('name','=',$sh_array[0])->first(); if($houses){ return response()->json(['status'=>0,'msg'=>'导入失败,商品名称数据重复']); }2,编辑的功能,未改变数据时的保存
$product_code = $request->get('product_code'); $res = Goods::where('product_code', '!=', $goods->product_code)->where('product_code', $product_code)->first(); if ($res) { return ['status' => 0, 'msg' => '该商品编号已经存在']; }