Comparte en Facebook Twitter Google+

banner-importar-datos-con-laravel-excel2

Para cargar datos a nuestra aplicación mientras estamos desarrollando puede que nos sea mucha utilidad el componente Seeders de Laravel que junto con los Models Factories nos permiten tener de una manera rápida y sencilla datos ficticios con los que trabajar. Pero ¿Qué sucede cuando tenemos la necesidad de cargar datos reales o dados por el mismo el mismo cliente? o éste nos solicita la funcionalidad de poder carga información en la aplicación a través de un archivo excel o csv.  Para ello, veamos cómo podemos hacerlo con Laravel Excel.

Para comenzar debemos tener una instalación de Laravel con las credenciales configuradas en el archivo .env para conectarse a una base de datos.

Ahora debemos instalar el componente Laravel Excel: nos guiamos de las instrucciones dadas en  Exportar hoja de cálculo con Eloquent y Laravel ExcelAl terminar, ya podemos hacer uso del componente en nuestro proyecto.

Vamos a crear un archivo CSV con el cual trabajaremos, llamado books.cvs y lo guardamos en el directorio public de nuestra aplicación, este archivo contendrá lo siguiente:

CSV es un tipo de archivo donde los valores están separados por comas, con los cuales se puede representar tablas, donde las columnas son los valores separados por las comas y las filas los separados por saltos de línea. Es una manera de dar formato a la información que ha sido tomado de una base de datos de manera que se puede leer y editar en software de hoja de cálculo o viceversa.

Lo siguiente es crear un modelo y su respectiva migración:

Con la opción -m estamos indicando que se cree también la migración.

Abrimos el archivo de migración creado y le agregamos los campos que tendrá la tabla:

Ejecutamos la migración: 

Modificamos el modelo creado para que se pueda cargar masivamente los datos, así:

Ahora creamos el controlador que nos permitirá importar el archivo:

y colocamos lo siguiente:

El método get() o all() devuelven lo importado como una colección de filas o hojas dependiendo de la cantidad de hojas que tenga el archivo.  Además, toma la primera fila como los atributos de la colección.  Por tanto podemos usar los métodos para interactuar con las colecciones con el resultado de la importación.

Creamos la ruta para llamar el método en routes.php:

Al irnos al navegador y visitamos la ruta http::laravel.app/import  (esto depende de la configuración de virtual host que se tenga, sino puedes usar php artisan serve) podemos ejecutar la importación y al verificar el resultado en la base de datos:

laravel-excel-datos-importados

Este es un ejemplo sencillo para cargar datos a la base de datos pero podemos hacer mucho más.

Se puede crear una clase para configurar la importación del archivo y llamarla por inyección de dependencias como se hace con los FormRequest, es decir, creamos booksImport.php en el directorio app, así:

y para usar la importación con esta clase, se implementaría de esta manera en el controlador:

Filtro chunk

Cuando se trabaja con grandes archivos, es mejor cargarlo por lotes o chunk; para activarlo se puede usar filter(‘chunk’) y para importar por lotes se puede usar chunk($size, $callback) en vez de get(), donde el primer parámetro es el tamaño del lote y el segundo es el closure que devolverá los resultados, por ejemplo:

En el caso de la inyección se define el filtro en el método getFilters() y se puede usar así:

Por otro lado se puede iterar el resultado tanto con foreach() como con each(), para este último puede ser:

En la página oficial Laravel Excel se encuentra la documentación de muchas otras características dependiendo de las necesidades. Espero te haya gustado. Recuerda dejar tus dudas en la sección de comentarios.

Material relacionado

Aprende PHP, Laravel y más por sólo 999 al mes: ver planes.

Lección anterior Generar PDFs en Laravel 5.1 con Snappy Lección siguiente Uso de Gravatar en Laravel 5.1