Цикл не работает должным образом в работе Laravel - PullRequest
0 голосов
/ 13 декабря 2018

Я использую 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 голосов
/ 13 декабря 2018

@ stuart спасибо за ваш комментарий.Это было потому, что у меня был рабочий цикл, который раньше работал с несколькими запросами ajax.Однако теперь, с очередью, я разместил записи rec_arr вне цикла.Здесь я поместил инициализацию этого массива внутрь цикла while, и он прекрасно работает.

0 голосов
/ 13 декабря 2018
if(count($records_arr)>0)

Эта строка, вероятно, всегда оценивается как true.

Ваш код никогда не достигает конечного условия $loop = false;.

...