Я импортирую 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
сбрасывается на zero
.
Это то, что 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;
}
Но результат все тот же.
Обновление : Я пытался получить доступ к счетчику извне методом collection
-
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
после каждого фрагмента?
TIA!