私の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);
ありがとう、私は完全に助けに感謝します。
のtry/catchが機能しないのではないでしょうか? – ceejayoz