美文网首页
laravel 框架导入后续 写入数据库

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

作者: 远方不会远 | 来源:发表于2018-08-07 10:11 被阅读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();
     }

    相关文章

      网友评论

          本文标题:laravel 框架导入后续 写入数据库

          本文链接:https://www.haomeiwen.com/subject/brlovftx.html