2 visitas

Cómo Leer Archivos CSV en Laravel: Guía Práctica para Desarrolladores PHP

Aprende a leer y procesar archivos CSV en Laravel de manera eficiente utilizando métodos nativos de PHP y la poderosa biblioteca League\Csv. Ideal para desarrolladores que buscan optimizar su flujo de trabajo.

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.

Cómo Leer Archivos CSV en Laravel: Guía Práctica para Desarrolladores PHP
28 January 2025

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer