From 459d0485961dbe7b2fe5187a784f08b33f808483 Mon Sep 17 00:00:00 2001 From: Ilya Rogozhin Date: Wed, 10 Jun 2026 10:31:13 +0200 Subject: [PATCH] Speed up export --- main-repo/app/Jobs/UsersExport.php | 34 +++++++++++++++++++----------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/main-repo/app/Jobs/UsersExport.php b/main-repo/app/Jobs/UsersExport.php index a4f47e9..94556a6 100644 --- a/main-repo/app/Jobs/UsersExport.php +++ b/main-repo/app/Jobs/UsersExport.php @@ -36,20 +36,30 @@ class UsersExport implements ShouldQueue $filename = 'users_export_' . now()->format('Y-m-d_H-i-s') . '.csv'; $filePath = $exportPath . '/' . $filename; - $handle = fopen($filePath, 'w'); + $fileHandle = fopen($filePath, 'w'); + fputcsv($fileHandle, ['Имя', 'Фамилия', 'Телефон', 'E-mail']); - fputcsv($handle, ['Имя', 'Фамилия', 'Телефон', 'E-mail']); + User::select('id', 'name', 'surname', 'phone_number', 'email') + ->chunkById(30000, function ($users) use ($fileHandle) { + $chunkHandle = fopen('php://memory', 'r+'); + + foreach ($users as $user) { + fputcsv($chunkHandle, [ + $user->name, + $user->surname, + $user->phone_number, + $user->email, + ]); + } + + rewind($chunkHandle); + $csvData = stream_get_contents($chunkHandle); + fclose($chunkHandle); + + fwrite($fileHandle, $csvData); + }); - foreach (User::select('name', 'surname', 'phone_number', 'email')->lazy() as $user) { - fputcsv($handle, [ - $user->name, - $user->surname, - $user->phone_number, - $user->email, - ]); - } - - fclose($handle); + fclose($fileHandle); Cache::forever('export_status', 'standby'); Cache::forever('last_export_file', 'exports/' . $filename);