Volver al blog Laravel

Cómo Leer Archivos CSV en Laravel

Aprende a leer y procesar archivos CSV en Laravel de manera eficiente.

28 diciembre 2024
testing csv

Si trabajas con Laravel, es probable que en algún momento necesites leer y procesar archivos CSV. Ya sea para importar datos, generar reportes o integrar información externa, Laravel ofrece varias formas de manejar este tipo de archivos. En este post, te mostraré dos métodos prácticos para leer CSV: uno usando funciones nativas de PHP y otro con la biblioteca League\Csv.

Método 1: Usando fgetcsv (PHP nativo)

PHP incluye una función llamada fgetcsv que permite leer archivos CSV línea por línea. Aquí te dejo un ejemplo de cómo usarla en Laravel:

public function readCSV($filePath)
{
    if (($handle = fopen($filePath, 'r')) !== false) {
        $header = fgetcsv($handle, 1000, ','); // Lee la primera línea como encabezado
    $data = [];
    while (($row = fgetcsv($handle, 1000, ',')) !== false) {
        $data[] = array_combine($header, $row); // Combina encabezado con datos
    }

    fclose($handle);
    return $data;
} else {
    throw new \Exception("No se pudo abrir el archivo CSV.");
}

}

Este método es sencillo y no requiere dependencias adicionales. Sin embargo, para archivos más grandes o necesidades avanzadas, te recomiendo usar la biblioteca League\Csv.

Método 2: Usando League\Csv

League\Csv es una biblioteca popular para trabajar con archivos CSV en PHP. Es más flexible y ofrece características avanzadas como validación de datos y manejo de encabezados.

Primero, instala la biblioteca con Composer:

composer require league/csv

Luego, puedes usarla en tu proyecto Laravel de la siguiente manera:

use League\Csv\Reader;

public function readCSV($filePath) { $csv = Reader::createFromPath($filePath, 'r'); $csv->setHeaderOffset(0); // Establece la primera fila como encabezado

$data = [];
foreach ($csv as $record) {
    $data[] = $record; // Agrega cada fila como un array asociativo
}

return $data;

}

Ejemplo Práctico

Imagina que tienes un archivo CSV llamado data.csv con el siguiente contenido:

name,email,phone
John Doe,john@example.com,123456789
Jane Doe,jane@example.com,987654321

Puedes leer este archivo en tu controlador y pasar los datos a una vista:

public function showCSVData()
{
$filePath = storage_path('app/data.csv'); // Ruta al archivo CSV
$data = $this->readCSV($filePath);

return view('csv_data', ['data' => $data]);

}

En tu vista csv_data.blade.php, puedes mostrar los datos en una tabla:

<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
</tr>
</thead>
<tbody>
@foreach($data as $row)
<tr>
<td>{{ $row['name'] }}</td>
<td>{{ $row['email'] }}</td>
<td>{{ $row['phone'] }}</td>
</tr>
@endforeach
</tbody>
</table>

Consejos Finales

  • Validación: Siempre valida el archivo CSV antes de procesarlo, especialmente si proviene de una fuente externa.
  • Rendimiento: Para archivos grandes, considera procesar el CSV en fragmentos o usar técnicas de streaming.
  • Bibliotecas: Si necesitas funcionalidades avanzadas, League\Csv es una excelente opción.

Con estos métodos, podrás leer y procesar archivos CSV en Laravel de manera eficiente. ¡Espero que este post te haya sido útil! Si tienes preguntas o sugerencias, déjalas en los comentarios.