laravel 框架导入后续 写入数据库

2018-08-07  本文已影响69人  远方不会远

写入数据库

   public function lessons_excel(Request $request)
   {   
                $time_star = time();//得到当前时间戳,用来在最后计算文件导入完毕后的用时
                //set_time_limit — 设置脚本最大执行时间。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。如果设置为0(零),没有时间方面的限制。
                $rlt = $this->upload_data($request);//调用上面的方法,上传文件得到文件名

             if ($rlt["success"] == false) {
                    return response()->json($rlt); 
            } else {
                 try {
                        $data = [];
                        $error= [];
                        $data1 = array();
                        $err_count='0';
                        $success_count='0';
                        $table = $this->load_excel($rlt["message"]);//调用load_excel方法导入文件

               

                       foreach ($table as $key =>$v) {
                                       if($key != '0'){
                                            foreach ($table[0] as $key1 =>$v1) {
                                                 $row[$v1] = trim($v[$key1]);//姓名
                                            }array_push($data, $row); 
                                        } 
                        }array_push($data1, $data); 

                        foreach($data as $d){
                               if(!$d)continue;
                               try{
                                           
                                                $insert_id = DB::table("school_lessons")->insertGetId($d);
                                                //一些数据库操作
                                            
                                            $success_count++;
                                       
                                
                                }catch (\Exception $e){
                                            $err_count++;

                                            array_push($error,$d);//失败数据存起来后面将把失败数据导出
                                            continue;
                                } 


                        }
                        if($error){
                                  
                                array_unshift($error,$table[0]);//将标题插入失败数据的第一行,后面导出
                                session(['error'=>$error]);//将要导出的内容存入session 键值为error
                                $download = true;//向前台返回一个标识,true说明有失败数据
                        }else{
                                $download = false;
                        }

                $time_end = time();
                return response()->json(["success" => true, "message" => "本次共导入 ".($success_count+$err_count).' 条数据, 其中成功 '.$success_count.' 条  , 其中失败 '.$err_count.' 条 。 ','download'=>$download,'time'=>($time_end-$time_star)]);

       
        } catch (\Exception $e) {


            return response()->json(["success" => false, "message" => "数据导入失败"]); 
            
        }
}

调用上面的方法,上传文件得到文件名

        //上传文件调用的方法
private function upload_data(Request $request)//导入的时候  上传文件
{
    if (!$request->hasFile('file')) {
        return [
            'success' => false,
            'message' => '上传文件为空'
        ];
    }//判断文件是否上传成功
    $file = $request->file('file');
    if (!$file->isValid()) {
        return [
            'success' => false,
            'message' => '文件上传出错'
        ];
    }
       
            //获取原文件名
            $originalName = $file->getClientOriginalName();
            //扩展名
            $ext = $file->getClientOriginalExtension();
            //文件类型
            $type = $file->getClientMimeType();
            //临时绝对路径
            $realPath = $file->getRealPath();

            $filename =date('Y-m-d H_i_s').uniqid().'.'.$ext;
            $storage_path = 'storage/excel';
             

             $bool = $file->move($storage_path, $filename);

           

            if($bool){

                   return [//上传成功返回文件名称
                          'success' => true,
                          'message' => $filename
                    ];
            }else{

                    return [
                            'success' => false,
                            'message' => '文件保存失败'
                        ];
            }

     
}

调用load_excel方法导入文件

   private function load_excel($filename)
    {
          $filePath = 'storage/excel/' . $filename;
           $reader = Excel::load($filePath);//要开始导入文件,可以使用->load($filename)。回调是可选的。
            $reader = $reader->getSheet(0);//得到Excel的第一页内容,如下图3
            return $reader->toArray();
 }
上一篇 下一篇

猜你喜欢

热点阅读