循环在laravel作业中无法按预期工作

时间:2018-12-13 12:13:23

标签: php laravel laravel-queue

我正在使用league/csv来解析csv文件,然后将这些数据转储到数据库中。

结构如下:

 $csv = Reader::createFromPath($csv_file_path, 'r');

 $csv->setOutputBOM(Reader::BOM_UTF8);
 $csv->addStreamFilter('convert.iconv.ISO-8859-15/UTF-8');

 $csv->setHeaderOffset(0); 
 $csv_header = $csv->getHeader();

 $loop = true;
 while($loop){

                $stmt = (new Statement())
                ->offset($offset)
                ->limit($limit)
                ;

                $records = $stmt->process($csv);

                foreach ($records as $record) 
                {
                    $rec_arr[] = array_values($record);
                }

                $records_arr = $service->trimArray($rec_arr);

                if(count($records_arr)>0)
                {
                    foreach($records_arr as $ck => $cv){
                         //map data and insert into database
                     }  

                }else{

                    $loop = false;
                }

        }

当前,我正在laravel队列中实现此逻辑。它可以成功插入整个数据集,但这不会停止该过程

它总是被消息processing所困扰。但是,如果我删除了该while循环,它将以消息processed停止。

所以,我认为应该在其中实施一些错误的逻辑。

正在寻找一个解决的办法。

2 个答案:

答案 0 :(得分:0)

if(count($records_arr)>0)

此行可能始终评估为true

您的代码永远不会达到$loop = false;结束条件。

答案 1 :(得分:0)

@stuart感谢您的评论。这是因为我以前有一个工作循环,该循环曾经用于多个ajax请求。但是,现在也有了队列,我已经将记录rec_arr放置在循环之外。在这里,我将此数组初始化放置在while循环中,并且工作得很好。