Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询失败时不要停止循环。拉维尔_Php_Laravel - Fatal编程技术网

Php 查询失败时不要停止循环。拉维尔

Php 查询失败时不要停止循环。拉维尔,php,laravel,Php,Laravel,我正在将一个.csv文件上载到我的laravel应用程序中的一个控制器,控制器循环遍历文件的所有行,并在我的数据库中创建新行。我工作得很好,但问题是如果csv的一行有问题,循环将停止,网页将显示查询问题的错误(可能是csv文件中的任何错误)。但我想要的是,每当一行无法保存时,控制器就会忽略该行并继续处理下一行。这是我的控制器的功能: public function submit_file(Company $company, Request $data) {

我正在将一个.csv文件上载到我的laravel应用程序中的一个控制器,控制器循环遍历文件的所有行,并在我的数据库中创建新行。我工作得很好,但问题是如果csv的一行有问题,循环将停止,网页将显示查询问题的错误(可能是csv文件中的任何错误)。但我想要的是,每当一行无法保存时,控制器就会忽略该行并继续处理下一行。这是我的控制器的功能:

 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);

非常感谢,我将非常感谢您的帮助。

不确定您是否这样做,但请尝试一下

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

try/catch不起作用吗?这就是解决方案,我只是在尝试保存新行时才执行try/catch,但确实如此。谢谢你,伙计。