Blog de Italo Morales Fantone
open main menu

Introducción a Laravel Excel

/ 2 min read

En este tercer ejercicio con Laravel 10 trabajamos con Eloquent y exportamos datos en formato Excel. El enfoque es entregar información útil al departamento administrativo para que tomen decisiones con los datos en la mano. Aprende mucho al respecto para que te vaya bien en los futuros ejercicios con el tema de exportar datos.

El ejercicio es: Exportar una colección de datos y una vista.

Código inicial: $ php artisan make:model Product -mf.

Migration

<?php

// ...

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();

            $table->string('name');
            $table->text('excerpt')->nullable();
            $table->text('description');
            $table->decimal('price', 8, 2);
            $table->integer('stock')->default(0);

            $table->timestamps();
        });
    }
	
	// ...
};

Aquí tenemos a $table->decimal('price', 8, 2), esta línea crea una columna para el precio y aceptará valores decimal. El (8) hace referencia al total de dígitos y el (2) es la cantidad de dígitos decimales.

Factory

<?php

// ...

class ProductFactory extends Factory
{
    public function definition(): array
    {
        return [
            'name' => fake()->sentence(2),
            'excerpt' => fake()->text(),
            'description' => fake()->text(),
            'price' => fake()->randomFloat(2, 10, 100),
            'stock' => fake()->numberBetween(0, 100),
        ];
    }
}

En fake()->randomFloat(2, 10, 100) generamos un decimal aleatorio dentro de un rango específico.

  • El primer valor (2) es la cantidad de decimales.
  • El segundo valor (10) es el valor mínimo.
  • El tercer valor (100) es el valor máximo.

En fake()->numberBetween(0, 100) generamos un entero aleatorio entre 0 y 100.

Seed

<?php

// ...

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        \App\Models\Product::factory(100)->create();
    }
}