10 abril, 2024
En este post, aprenderemos a importar datos desde archivos Excel o CSV a una tabla MySQL utilizando Laravel. Este proceso es útil para migrar datos existentes, cargar información de forma masiva o automatizar la entrada de datos.
Suscríbete a nuestro canal en Youtube
SuscríbirseEn este post, aprenderemos a importar datos desde archivos Excel o CSV a una tabla MySQL utilizando Laravel. Este proceso es útil para migrar datos existentes, cargar información de forma masiva o automatizar la entrada de datos.
Contenido:
Bien, desarrollemos el ejemplo:
Para poder instalar un archivo .CSV debemos cumplir con ciertos requisitos que a continuación detallo:
Ejecutamos en la ventana de CMD
composer create-project laravel/laravel ImportExcel
Necesitamos el paquete de Laravel Excel visitemos su documentación. Veamos la instalación en Laravel 10.*
composer require maatwebsite/excel
Luego, configuramos el provider y alias en el archivo config/app.php
Maatwebsite\Excel\ExcelServiceProvider::class,
y
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
Finalmente publicamos
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
Con el CMD creamos el modelo y la migración
php artisan make:model Data -m
La migración modificada sera:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('data', function (Blueprint $table) {
$table->id();
$table->string('organization_id',100);
$table->string('name',100);
$table->string('website',100);
$table->string('country',100);
});
}
public function down(): void
{
Schema::dropIfExists('data');
}
};
Y el modelo actualizado será:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Data extends Model
{
use HasFactory;
public $timestamps = false;
protected $guarded = [];
}
Para crear una clase Import ejecutamos el siguiente CMD en Laravel o la terminal que este usando solo fijate que debe estar en el directorio del projecto:
php artisan make:import DataImport --model=Data
y la clase modificada es la siguiente:
namespace App\Imports;
use App\Models\Data;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class DataImport implements ToCollection, WithHeadingRow
{
public function collection(Collection $rows)
{
//dd($rows);
foreach($rows as $row){
Data::create([
'organization_id'=>$row['organization_id'],
'name'=>$row['name'],
'website'=>$row['website'],
'country'=>$row['country'],
]);
}
}
}
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ExcelController;
Route::get('excel', [ExcelController::class,'form']);
Route::post('excel', [ExcelController::class,'import']);
namespace App\Http\Controllers;
use App\Imports\DataImport;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class ExcelController extends Controller
{
public function form(){
return view('formulario');
}
public function import(Request $request){
//dd("imp");
// validate
$file = $request->file('file');
Excel::import(new DataImport,$file);
}
}
La vista básicamente contiene un formulario con el método post además de permitir subir archivos y un botón submit; veamos el código:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" >
@csrf
<input type="file" name="file">
<br>
<input type="submit" value="IMPORTAR">
</form>
</body>
</html>
Leido 1390 veces | 0 usuarios
Código fuente no disponible.
© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024