Speed up export

This commit is contained in:
Ilya Rogozhin
2026-06-10 10:31:13 +02:00
parent 0c6957ce0e
commit 459d048596
+22 -12
View File
@@ -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);