4
respostas

Como implementar o metodo chunk() para upload de arquivos Excel grandes

Estou tentando fazer um upload de um arquivo Excel com mais de 120.000 linhas que relaciona umas 10 tabelas no meu banco de dados, o código abaixo funciona perfeitamente em arquivos menores a questão e que quando o arquivo e muito grande a memoria não aguenta, por isso o motivo do chunk(), já tentei de varias formas implementar o chunk() mais não obtive sucesso. Alguém pode me ajudar ??

 public function uploadNotaCorte(Request $request, EstadoRepository $estadoRepository)
    {
        $error      = array();
        $path       = $request->file('file')->getRealPath();
        $notasCorte = Excel::load($path, function($reader) {
        })->get();

       // $chunk não ta funcionando 
        $chunk      = $notasCorte->chunk(100);

        foreach ($notasCorte as $key => $notaCorte) {
         // meu codigo
    }
4 respostas

Oi Ronnyere, tudo bom?

O que o método load da classe Excel te retorna?

esse retorno possui o método chunk?

O que o método chunk faz? divide em 100 partes?

Se o seu retorno for um array, você pode dar uma olhada no array_chunk.

Abraço

CHUNK() serve para divide meu arquivo a cada 100 linhas para o processamento não ficar muito grande e consumir a memoria já o LOAD RETORNA O MEU $PATH que tem meu arquivo excel o método funciona consigo fazer o upload do excel no meu banco de dados mais o chunk() não ta funcionando e se o arquivo for muito grande da erro por causa da memoria. SEGUE UM EXEMPLO DO CHUNK()

$collection = collect([1, 2, 3, 4, 5, 6, 7]);

$chunks = $collection->chunk(4);

$chunks->toArray();

// [[1, 2, 3, 4], [5, 6, 7]]

Você já chegou a verificar a memory_limit através do php.ini?

Algumas pessoas fazem isto:

ini_set('memory_limit', '-1');

Veja se isto irá lhe ajudar: https://github.com/Maatwebsite/Laravel-Excel/issues/1394

Valeu pelo comentário Matheus mais o meu php.ini já esta assim mesmo assim obrigado.