
Primero que nada instalar el complemento, agregando el paquete al archivo composer.json:
"maatwebsite/excel": "~2.0"
En este tutorial también vamos a necesitar el complemento Faker. Si no lo tienes instalado, puedes agregar el paquete también antes de actualizar composer. Para cualquier duda ir a la lección: Seeders y el componente Faker en Laravel 5
seguidamente, actualizamos composer en la consola:
composer update
Agregamos el Provider de Excel en config/app.php:
'Maatwebsite\Excel\ExcelServiceProvider',
y el alias:
'Excel' => 'Maatwebsite\Excel\Facades\Excel',
Por último, generamos el archivo de configuración de Excel. En la consola:
php artisan vendor:publish
Bien, ya tenemos los componentes instalados y listos para usar.
Generar código que se va a exportar con Faker
Vamos a crear datos de prueba para poder exportarlos, voy a utilizar como ejemplo una tabla de productos muy sencilla. Para ello comencemos con crear el modelo:
php artisan make:model -m Product
Con la opción -m, este comando genera automáticamente la migración.
Modifiquemos la migración:
public function up()
{
Schema::create('products', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->mediumText('description');
$table->integer('serial')->unsigned();
$table->integer('quantity')->unsigned();
$table->timestamps();
});
}
Modifiquemos el seeder:
<?php
use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
use Illuminate\Support\Str as Str;
class ProductTableSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create();
for($i = 0; $i<30; $i++){
\DB::table('products')->insert(array(
'name' => $faker->name,
'description' => $faker->paragraph(),
'serial' => $faker->numberBetween(54826571,95653254),
'quantity' => $faker->numberBetween(0,1000)
));
}
}
}
y coloquemos el llamado al seeder en DatabaseSeeder.php:
$this->call('ProductTableSeeder');
Para continuar, debes tener configurada la base de datos en el archivo .env de tu aplicación.
Ahora bien, vamos a ejecutar la migración con los seeders:
php artisan migrate --seed
Si no encontró tu archivo seed, intenta en la consola con: composer dump-autoload
Muy bien, la información de los productos ha sido generada, ahora necesitamos el controlador para exportar los datos:
php artisan make:controller ExcelController
Modificamos la función index del controlador y coloquemos la implementación al modelo Product y la del complemento Excel:
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Product;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class ExcelController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
Excel::create('Laravel Excel', function($excel) {
$excel->sheet('Productos', function($sheet) {
$products = Product::all();
$sheet->fromArray($products);
});
})->export('xls');
}
}
y por supuesto, agregamos la ruta del controlador:
Route::resource('excel','ExcelController');
Vamos a probar, dirígete a la ruta: nombre_de_tu_aplicacion.app/excel y se debe desplegar una pantalla para descargar tu archivo (Esto puede tardar un momento). Perfecto, revisemos el documento a ver que tal:
Excelente, ya tienes un útil documento Excel con todo el contenido de la tabla.
Tip: Recuerda que puedes utilizar todas las funciones del ORM, como por ejemplo si no quieres exportar las columnas created_at ni update_at, sería:
$products = Product::select('id','name','description','serial','quantity')->get();
¿Qué te ha parecido?. Recuerda dejar tu opinión en la sección de comentarios o compartir el post en tus redes sociales.
Lecciones recomendadas:
- Seeders y el componente Faker en Laravel 5
- Creando nuestras primeras migraciones
- Cargar datos de prueba con los seeders y el componente Faker
- Primeros pasos con Eloquent
- Laravel-Excel (Documentación Oficial)
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Sistema de pagos en Laravel 5 con Cashier y Stripe Lección siguiente Autenticación en Laravel 5 con Eloquent OAuth y Facebook
