Speed up export
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user