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';
|
$filename = 'users_export_' . now()->format('Y-m-d_H-i-s') . '.csv';
|
||||||
$filePath = $exportPath . '/' . $filename;
|
$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 (User::select('name', 'surname', 'phone_number', 'email')->lazy() as $user) {
|
foreach ($users as $user) {
|
||||||
fputcsv($handle, [
|
fputcsv($chunkHandle, [
|
||||||
$user->name,
|
$user->name,
|
||||||
$user->surname,
|
$user->surname,
|
||||||
$user->phone_number,
|
$user->phone_number,
|
||||||
$user->email,
|
$user->email,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose($handle);
|
rewind($chunkHandle);
|
||||||
|
$csvData = stream_get_contents($chunkHandle);
|
||||||
|
fclose($chunkHandle);
|
||||||
|
|
||||||
|
fwrite($fileHandle, $csvData);
|
||||||
|
});
|
||||||
|
|
||||||
|
fclose($fileHandle);
|
||||||
|
|
||||||
Cache::forever('export_status', 'standby');
|
Cache::forever('export_status', 'standby');
|
||||||
Cache::forever('last_export_file', 'exports/' . $filename);
|
Cache::forever('last_export_file', 'exports/' . $filename);
|
||||||
|
|||||||
Reference in New Issue
Block a user