首页 > 解决方案 > 循环在 laravel 工作中没有按预期工作

问题描述

我正在使用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 队列中实现这个逻辑。它成功地插入了整组数据,但并没有停止该过程

它一直卡在 messageprocessing上。但是,如果我删除了该while循环,那么它将以 message 停止processed

所以,我认为这应该是我在那里实施一些错误的逻辑。

寻找一个想法来解决这个问题。

标签: phplaravellaravel-queue

解决方案


if(count($records_arr)>0)

这条线可能评估为true总是。

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


推荐阅读