2017-06-01 6 views
0

私のlaravelアプリケーションのコントローラに.csvファイルをアップロードしています。コントローラはファイルのすべての行をループし、データベースに新しい行を作成します。私はかなりうまくいきますが、問題は、csvの行の1つに問題があると、ループが停止し、Webページにクエリの問題のエラーが表示されることです(csvファイルに何か間違っている可能性があります)。しかし、私が欲しいのは、ある行を保存できないときはいつでも、コントローラーはその行を省略して次の列と作業を続けるということです。これは私のコントローラの機能です:クエリが失敗したときにループを停止しません。 LARAVEL

public function submit_file(Company $company, Request $data) 
     { 
      $this->validate($data, [ 
       'csvfile' => 'required' 
      ]); 
      $path = $data-> csvfile ->path(); 
      $file = fopen($path,"r"); 
      $num=1; 
      $errors=[]; 
      while(!feof($file)){ 
       $job = New Job(); 
       $line=""; 
       $line=fgetcsv($file, 0, ";"); 
       $job->city=$line[1]; 
       $job->id_position =intval($line[2]);    

       // and so on .. 

       if(!$company->jobs()->save($job)){ 
        $errors.push(array("Line # $num" => "The line # $num of the CSV file could not be uploaded“)); 
       } 
       $num++; 
      } 
      return back()->withErrors($errors); 
     } 

私はtry catchで試してみましたが、正しく使用する方法がわかりません。

 try { 
      $company->jobs()->save($job); 
     } catch(Exception $e){     
      array_push($errors,"The line # $num of the CSV file could not be uploaded. Error: " . $e->getMessage());    
     } 

return back()->withErrors($errors); 

ありがとう、私は完全に助けに感謝します。

+0

のtry/catchが機能しないのではないでしょうか? – ceejayoz

答えて

1

ないあなたが何をしたかthatsの場合は必ずこの

public function submit_file(Company $company, Request $data) 
    { 
     $this->validate($data, [ 
      'csvfile' => 'required' 
     ]); 
     $path = $data-> csvfile ->path(); 
     $file = fopen($path,"r"); 
     $num=1; 
     $errors=[]; 
     while(!feof($file)){ 

      try { 
       $job = New Job(); 
       $line=""; 
       $line=fgetcsv($file, 0, ";"); 
       $Job->city=$line[1]; 
       $Job->id_position =intval($line[2]); 

       // and so on .. 

       if(!$company->jobs()->save($job)){ 
        $errors.push(array("Line # $num" => "The line # $num of the CSV file could not be uploaded")); 
       } 
       $num++; 
      } catch(\Exception $ex) { 
       $errors . push(array("Line # $num" => "The line # $num of the CSV file could not be uploaded. Error: $ex->getMessage() ")); 
      } 
     } 
     return back()->withErrors($errors); 
    } 

を試すファイルと間違って何かあればまた、QueryException

+0

それは解決策でした。私は新しい行を保存しようとしたときにのみtry/catchを実行していましたが、そうでした。ありがとう、たくさんの男。 –

関連する問題