Exportar grandes conjuntos de dados no Laravel pode ser desafiador, pois você precisa estar atento aos limites de memória e tempo de processamento.
Exportar grandes conjuntos de dados no Laravel pode ser desafiador, pois você precisa estar atento aos limites de memória e tempo de processamento.
Você viu esta mensagem de erro ao exportar grandes conjuntos de dados no Laravel?
Allowed memory size of 134217728 bytes exhausted (tried to allocate 20971520 bytes)
Este foi um problema com o qual lutei por muito tempo usando o pacote Laravel Excel até encontrar spatie/simple-excel, o que torna isso muito fácil.
O exemplo abaixo exportará uma lista de usuários para um CSV de forma rápida e eficiente sem esgotar a memória. Usei esse método com mais de 200 mil registros gerando um arquivo CSV de mais de 30 MB em poucos minutos.
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Spatie\SimpleExcel\SimpleExcelWriter;
class UserExportController extends Controller
{
public function export()
{
$writer = SimpleExcelWriter::streamDownload('users.csv');
$query = User::orderBy('created_at');
$i = 0;
foreach ($query->lazy(1000) as $user)
{
$writer->addRow($user->toArray());
if ($i % 1000 === 0) {
flush(); // Flush the buffer every 1000 rows
}
$i++;
}
return $writer->toBrowser();
}
}
Top comments (0)