Счетчик сбрасывается до нуля после каждого фрагмента импорта Laravel Excel.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Счетчик сбрасывается до нуля после каждого фрагмента импорта Laravel Excel.

Сообщение Anonymous »

Я импортирую CSV-файл, используя пакет maatwebsite/excel. CSV содержит более 100 миллионов строк, поэтому я использую WithChunkReading. Я также регистрирую каждую вставку строки.

Код: Выделить всё

protected $rowCount = 0;

public function collection(Collection $rows): bool
{
foreach ($rows as $row)
{
// Insertions here

++$this->rowCount;
Log::debug('Inserted row #'.$this->rowCount);
}
return false;
}

public function chunkSize(): int
{
return 10;
}
Проблема в том, что после каждого фрагмента $rowCount сбрасывается в ноль.

Вот что выводит laravel.log:

[2020-07-13 10: 06:10] local.DEBUG: вставлена ​​строка №1

[2020-07-13 10:06:11] local.DEBUG: вставлена ​​строка №2

[2020] -07-13 10:06:11] local.DEBUG: вставлена ​​строка № 3

[2020-07-13 10:06:11] local.DEBUG: вставлена ​​строка № 4

[2020-07-13 10:06:11] local.DEBUG: Вставлена ​​строка №5

[2020-07-13 10:06:12] local.DEBUG: Вставлена ​​строка #6

[2020-07-13 10:06:12] local.DEBUG: вставлена ​​строка #7

[2020-07-13 10:06:12] local.DEBUG: вставлена ​​строка №8

[2020-07-13 10:06:12] local.DEBUG: вставлена ​​строка №9

[2020-07-13 10:06:13] local.DEBUG: вставлена ​​строка №10

[2020-07-13 10:06:16] local.DEBUG: вставлена ​​строка №1

[2020-07-13 10:06:16] local.DEBUG: Вставлена ​​строка №2

[2020-07-13 10:06:16] local.DEBUG: Вставлена ​​строка №3

Я также пробовал использовать $rowCount по ссылке в замыкании

Код: Выделить всё

public function collection(Collection $rows): bool
{
$rowCount = 0;
foreach ($rows as $row)
{
// Insertions here

$counter = function() use(&$rowCount){
return ++$rowCount;
};
Log::debug('Inserted row #'.$counter->call($row));
}
return false;
}
Но результат всё тот ​​же.


Обновление: я попытался получить доступ к счетчику вне метода сбора -

Код: Выделить всё

protected $rowCount = 0;

public function collection(Collection $rows): bool
{
foreach ($rows as $row)
{
// Insertions here

$rowCount = $this->incrementCounter();
Log::debug('Inserted row #'.$rowCount);
}
return false;
}

protected function incrementCounter(){
return ++$this->rowCount;
}

public function chunkSize(): int
{
return 10;
}
Однако и это не помогло. Счетчик по-прежнему сбрасывается обратно.
Как сохранить значение $rowCount, чтобы оно не сбрасывалось обратно в 0 после каждого фрагмента?

ТИА!

Подробнее здесь: https://stackoverflow.com/questions/628 ... cel-import
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»