DB::table('resources')->select('hash')->orderBy('id')->chunk(50000,
function ($resources) use ($file, $updatedDate) {
$lineCount = 1;
echo 1 . '<>';
while (!feof($file)) {
$line = iconv('cp1251', 'utf-8', fgets($file));
$csv = str_getcsv($line, ';');
if (count($csv) === 6) {
$ipPool = explode('|', $csv[0]);
foreach ($ipPool as $ip) {
$date = new \DateTime($csv[5]);
$hash = md5($csv[1] . $csv[2]);
foreach ($resources as $resource) {
if ($hash === $resource->hash) {
DB::table('resources')->where('hash', $hash)->update([
'version_date' => $updatedDate,
]);
echo $lineCount++ . "<br>" ;
}
// тут нужно записать если такой записи нет
}
}
}
$lineCount++;
}
});
$map = [];
DB::table('resources')->select('hash')->chunk(50000,
function ($resources) {
$map[$resource->hash] = $resource; // сюда можнок класть только действительно необходимые данные, чтобы память не засрать
}
});
while (!feof($file)) {
$line = iconv('cp1251', 'utf-8', fgets($file));
$csv = str_getcsv($line, ';');
if (count($csv) === 6) {
$ipPool = explode('|', $csv[0]);
foreach ($ipPool as $ip) {
$date = new \DateTime($csv[5]);
$hash = md5($csv[1] . $csv[2]);
if (isset($map[$hash]) {
// запись существует, делаете апдейт
} else {
// записи нет, добавляете в свою таблицу
}
}
}