Exportar Una Base De Datos MySQL En Formato CSV Y Excel En Laravel 8

En Laravel, no tiene que escribir un código largo para exportar sus datos, ya hay un paquete disponible para eso: Laravel Excel.

Permite exportar datos en varios formatos como: XLSX, CSV, XLS, HTML, etc.

En este tutorial, muestro cómo puedes exportar datos de bases de datos MySQL en formato CSV y Excel usando el paquete Laravel Excel en Laravel 8.


1. Paquete de instalación

Requisito –

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpHoja de cálculo: ^1.21
  • psr/caché simple: ^1.0
  • Extensión PHP  php_zip habilitada
  • Extensión PHP  php_xml habilitada
  • Extensión PHP  php_gd2 habilitada
  • Extensión PHP  php_iconv habilitada
  • Extensión PHP  php_simplexml habilitada
  • Extensión PHP  php_xmlreader habilitada
  • Extensión PHP  php_zlib habilitada

Instale el paquete usando composer –

composer require maatwebsite/excel

Si recibe un error al ejecutar el comando anterior, ejecute el siguiente comando:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Después de eso nuevamente ejecute –

composer require maatwebsite/excel

2. Actualizar aplicación.php

  • Abrir  config/app.php archivo.
  • Agregue lo siguiente Maatwebsite\Excel\ExcelServiceProvider::class en  'providers' –
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Agregue lo siguiente  'Excel' => Maatwebsite\Excel\Facades\Excel::class en  'aliases' –
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Publicar paquete

Ejecute el comando –

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Esto creará un nuevo excel.phparchivo en formato config/.


4. Configuración de la base de datos

Abrir .envarchivo.

Especifique el host, el nombre de la base de datos, el nombre de usuario y la contraseña.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Crear tabla

  • Cree una nueva tabla Employeesmediante la migración y agregue algunos registros.
php artisan make:migration create_employees_table
  • Ahora, navegue a database/migrations/la carpeta desde la raíz del proyecto.
  • Encuentre un archivo PHP que termine con create_employees_tabley ábralo.
  • Defina la estructura de la tabla en el up()método.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Ejecute la migración –
php artisan migrate
  • La tabla se ha creado y se agregan algunos registros en ella.

6. Modelo

  • Crear Employeesmodelo.
php artisan make:model Employees
  • Abrir  app/Models/Employees.php archivo.
  • Especifique atributos de modelo asignables en masa: nombre de usuario, nombre, correo electrónico y edad utilizando la $fillablepropiedad.

Código completado

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Crear clase de exportación

Estoy creando 2 clases de exportación solo con fines de ejemplo:

1. Clase de Exportación de Empleados –

php artisan make:export EmployeesExport --model=Employees
  • Abrir  app/Exports/EmployeesExport.php archivo.

La clase tiene 2 métodos:

  • colección () – Cargar datos de exportación. Aquí, puedes:
    • Devolver todos los registros.
    • Devuelva columnas específicas o modifique la respuesta de devolución que hice en la siguiente clase de exportación.
  • headers(): especifica la fila del encabezado.

NOTA: elimine los métodos de encabezados () si no desea agregar una fila de encabezado.

Código completado

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesExport implements FromCollection, WithHeadings
{

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 1. Export all data
        // return Employees::all();

        ## 2. Export specific columns
        return Employees::select('id','username','name')->get();

    }

    public function headings(): array
    {
        return [
          '#',
          'Username',
          'Name'
        ];
    }
}

2. Clase de exportación EmployeesByAge:

php artisan make:export EmployeesByAgeExport --model=Employees
  • Abrir  app/Exports/EmployeesByAgeExport.php archivo.
  • En esta clase, agregué __construct()para permitir el envío de un parámetro al crear una instancia de clase y usarlo para recuperar datos.
  • Después de inicializar el paso de $resultmatriz para el retorno:$resultcollect()return collect($result);
  • Mencione los nombres de las filas de encabezado en el heading()método.

Código completado

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesByAgeExport implements FromCollection, WithHeadings
{
    private $agegreaterthan;

    public function __construct($age=0) 
    {
        $this->agegreaterthan = $age;
    }

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 3. Conditional export and customize result
        $records = Employees::select('*')->where('age','>',$this->agegreaterthan)->get();

        $result = array();
        foreach($records as $record){
           $result[] = array(
              'id'=>$record->id,
              'username' => $record->username,
              'name' => $record->name,
              'email' => $record->email,
              'age' => $record->age,
              'status' => 1 // Custom data
           );
        }

        return collect($result);
    }

    public function headings(): array
    {
       return [
         '#',
         'Username',
         'Name',
         'Email',
         'Age',
         'Status'
       ];
    }
}

8. Ruta

  • Abrir  routes/web.php archivo.
  • Definir 4 rutas –
    • / –  Cargar vista de índice.
    • empleados/exportcsv: exporta datos en formato CSV.
    • empleados/exportexcel – Exportar datos en formato Excel.
    • empleados/exportbyagecsv: ruta POST para exportar datos por edad.

Código completado

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::get('employees/exportcsv', [EmployeesController::class, 'exportCSV'])->name('employees.exportcsv');
Route::get('employees/exportexcel', [EmployeesController::class, 'exportExcel'])->name('employees.exportexcel');
Route::post('employees/exportbyagecsv', [EmployeesController::class, 'exportByAgeCSV'])->name('employees.exportbyagecsv');

9. Controlador

  • Crear  EmployeesController controlador.
php artisan make:controller EmployeesController
  • Abrir  app/Http/Controllers/EmployeesController.php archivo.
  • Importar y . EmployeesExportEmployeesByAgeExportExcel
  • Crear 4 métodos –
    • index() – Cargar indexvista.
    • exportCSV():  para exportar datos, llame a Excel::download().

Se necesitan 2 parámetros:

  1. instancia de clase.
  2. Nombre de archivo con extensión.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesExport, $file_name);
  • exportExcel(): use el mismo código anterior y cambie la extensión del archivo a .xlsx.
  • exportByAgeCSV(): lea el valor de edad POST y páselo con la EmployeesByAgeExport($age)instancia.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesByAgeExport($age), $file_name);

Código completado

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\EmployeesExport;
use App\Exports\EmployeesByAgeExport;
use Excel;

class EmployeesController extends Controller
{
    public function index(){
       return view('index');
    }

    // CSV Export
    public function exportCSV(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Excel Export
    public function exportExcel(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.xlsx';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Conditional Export (csv)
    public function exportByAgeCSV(Request $request){

       $age = $request->age;

       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesByAgeExport($age), $file_name);
    }
}

10. Ver

Crear  index.blade.php archivo en  resources/views/ carpeta.

Crea 2 elementos de anclaje –

  1. Configúrelo hrefpara {{ route('employees.exportcsv') }}exportar a CSV.
  2. Configurado hrefpara {{ route('employees.exportexcel') }}exportar a Excel.

Crea un <form method='post' action="{{ route('employees.exportbyagecsv') }}">. Agregue un elemento de entrada para ingresar la edad y un botón de envío.

Código completado

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1"> 
   <title>How to Export data to CSV & Excel format in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <a class="btn btn-primary" href="{{ route('employees.exportcsv') }}">CSV Export</a> &nbsp;&nbsp;
      <a class="btn btn-primary" href="{{ route('employees.exportexcel') }}">Excel Export</a><br><br>

      <form method='post' action="{{ route('employees.exportbyagecsv') }}">
         @csrf
         <div class="mb-3">
            <label for="age" class="form-label">Age</label>
            <input type="number" class="form-control" id="age" name="age" value="0">
         </div>

         <button type="submit" class="btn btn-success">Export</button>
      </form>
   </div>

</body>
</html>

11. demostración

Ver demostración


12. Conclusión

Use el constructor en la clase Export para manejar los parámetros pasados ​​y utilícelo para obtener datos.

En este tutorial, solo mencioné 2 formatos de exportación: CSV y Excel, pero hay más formatos disponibles.

Fuente: https://makitweb.com

#php #laravel #mysql 

What is GEEK

Buddha Community

Exportar Una Base De Datos MySQL En Formato CSV Y Excel En Laravel 8

Exportar Una Base De Datos MySQL En Formato CSV Y Excel En Laravel 8

En Laravel, no tiene que escribir un código largo para exportar sus datos, ya hay un paquete disponible para eso: Laravel Excel.

Permite exportar datos en varios formatos como: XLSX, CSV, XLS, HTML, etc.

En este tutorial, muestro cómo puedes exportar datos de bases de datos MySQL en formato CSV y Excel usando el paquete Laravel Excel en Laravel 8.


1. Paquete de instalación

Requisito –

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpHoja de cálculo: ^1.21
  • psr/caché simple: ^1.0
  • Extensión PHP  php_zip habilitada
  • Extensión PHP  php_xml habilitada
  • Extensión PHP  php_gd2 habilitada
  • Extensión PHP  php_iconv habilitada
  • Extensión PHP  php_simplexml habilitada
  • Extensión PHP  php_xmlreader habilitada
  • Extensión PHP  php_zlib habilitada

Instale el paquete usando composer –

composer require maatwebsite/excel

Si recibe un error al ejecutar el comando anterior, ejecute el siguiente comando:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Después de eso nuevamente ejecute –

composer require maatwebsite/excel

2. Actualizar aplicación.php

  • Abrir  config/app.php archivo.
  • Agregue lo siguiente Maatwebsite\Excel\ExcelServiceProvider::class en  'providers' –
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Agregue lo siguiente  'Excel' => Maatwebsite\Excel\Facades\Excel::class en  'aliases' –
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Publicar paquete

Ejecute el comando –

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Esto creará un nuevo excel.phparchivo en formato config/.


4. Configuración de la base de datos

Abrir .envarchivo.

Especifique el host, el nombre de la base de datos, el nombre de usuario y la contraseña.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Crear tabla

  • Cree una nueva tabla Employeesmediante la migración y agregue algunos registros.
php artisan make:migration create_employees_table
  • Ahora, navegue a database/migrations/la carpeta desde la raíz del proyecto.
  • Encuentre un archivo PHP que termine con create_employees_tabley ábralo.
  • Defina la estructura de la tabla en el up()método.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Ejecute la migración –
php artisan migrate
  • La tabla se ha creado y se agregan algunos registros en ella.

6. Modelo

  • Crear Employeesmodelo.
php artisan make:model Employees
  • Abrir  app/Models/Employees.php archivo.
  • Especifique atributos de modelo asignables en masa: nombre de usuario, nombre, correo electrónico y edad utilizando la $fillablepropiedad.

Código completado

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Crear clase de exportación

Estoy creando 2 clases de exportación solo con fines de ejemplo:

1. Clase de Exportación de Empleados –

php artisan make:export EmployeesExport --model=Employees
  • Abrir  app/Exports/EmployeesExport.php archivo.

La clase tiene 2 métodos:

  • colección () – Cargar datos de exportación. Aquí, puedes:
    • Devolver todos los registros.
    • Devuelva columnas específicas o modifique la respuesta de devolución que hice en la siguiente clase de exportación.
  • headers(): especifica la fila del encabezado.

NOTA: elimine los métodos de encabezados () si no desea agregar una fila de encabezado.

Código completado

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesExport implements FromCollection, WithHeadings
{

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 1. Export all data
        // return Employees::all();

        ## 2. Export specific columns
        return Employees::select('id','username','name')->get();

    }

    public function headings(): array
    {
        return [
          '#',
          'Username',
          'Name'
        ];
    }
}

2. Clase de exportación EmployeesByAge:

php artisan make:export EmployeesByAgeExport --model=Employees
  • Abrir  app/Exports/EmployeesByAgeExport.php archivo.
  • En esta clase, agregué __construct()para permitir el envío de un parámetro al crear una instancia de clase y usarlo para recuperar datos.
  • Después de inicializar el paso de $resultmatriz para el retorno:$resultcollect()return collect($result);
  • Mencione los nombres de las filas de encabezado en el heading()método.

Código completado

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesByAgeExport implements FromCollection, WithHeadings
{
    private $agegreaterthan;

    public function __construct($age=0) 
    {
        $this->agegreaterthan = $age;
    }

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 3. Conditional export and customize result
        $records = Employees::select('*')->where('age','>',$this->agegreaterthan)->get();

        $result = array();
        foreach($records as $record){
           $result[] = array(
              'id'=>$record->id,
              'username' => $record->username,
              'name' => $record->name,
              'email' => $record->email,
              'age' => $record->age,
              'status' => 1 // Custom data
           );
        }

        return collect($result);
    }

    public function headings(): array
    {
       return [
         '#',
         'Username',
         'Name',
         'Email',
         'Age',
         'Status'
       ];
    }
}

8. Ruta

  • Abrir  routes/web.php archivo.
  • Definir 4 rutas –
    • / –  Cargar vista de índice.
    • empleados/exportcsv: exporta datos en formato CSV.
    • empleados/exportexcel – Exportar datos en formato Excel.
    • empleados/exportbyagecsv: ruta POST para exportar datos por edad.

Código completado

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::get('employees/exportcsv', [EmployeesController::class, 'exportCSV'])->name('employees.exportcsv');
Route::get('employees/exportexcel', [EmployeesController::class, 'exportExcel'])->name('employees.exportexcel');
Route::post('employees/exportbyagecsv', [EmployeesController::class, 'exportByAgeCSV'])->name('employees.exportbyagecsv');

9. Controlador

  • Crear  EmployeesController controlador.
php artisan make:controller EmployeesController
  • Abrir  app/Http/Controllers/EmployeesController.php archivo.
  • Importar y . EmployeesExportEmployeesByAgeExportExcel
  • Crear 4 métodos –
    • index() – Cargar indexvista.
    • exportCSV():  para exportar datos, llame a Excel::download().

Se necesitan 2 parámetros:

  1. instancia de clase.
  2. Nombre de archivo con extensión.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesExport, $file_name);
  • exportExcel(): use el mismo código anterior y cambie la extensión del archivo a .xlsx.
  • exportByAgeCSV(): lea el valor de edad POST y páselo con la EmployeesByAgeExport($age)instancia.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesByAgeExport($age), $file_name);

Código completado

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\EmployeesExport;
use App\Exports\EmployeesByAgeExport;
use Excel;

class EmployeesController extends Controller
{
    public function index(){
       return view('index');
    }

    // CSV Export
    public function exportCSV(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Excel Export
    public function exportExcel(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.xlsx';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Conditional Export (csv)
    public function exportByAgeCSV(Request $request){

       $age = $request->age;

       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesByAgeExport($age), $file_name);
    }
}

10. Ver

Crear  index.blade.php archivo en  resources/views/ carpeta.

Crea 2 elementos de anclaje –

  1. Configúrelo hrefpara {{ route('employees.exportcsv') }}exportar a CSV.
  2. Configurado hrefpara {{ route('employees.exportexcel') }}exportar a Excel.

Crea un <form method='post' action="{{ route('employees.exportbyagecsv') }}">. Agregue un elemento de entrada para ingresar la edad y un botón de envío.

Código completado

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1"> 
   <title>How to Export data to CSV & Excel format in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <a class="btn btn-primary" href="{{ route('employees.exportcsv') }}">CSV Export</a> &nbsp;&nbsp;
      <a class="btn btn-primary" href="{{ route('employees.exportexcel') }}">Excel Export</a><br><br>

      <form method='post' action="{{ route('employees.exportbyagecsv') }}">
         @csrf
         <div class="mb-3">
            <label for="age" class="form-label">Age</label>
            <input type="number" class="form-control" id="age" name="age" value="0">
         </div>

         <button type="submit" class="btn btn-success">Export</button>
      </form>
   </div>

</body>
</html>

11. demostración

Ver demostración


12. Conclusión

Use el constructor en la clase Export para manejar los parámetros pasados ​​y utilícelo para obtener datos.

En este tutorial, solo mencioné 2 formatos de exportación: CSV y Excel, pero hay más formatos disponibles.

Fuente: https://makitweb.com

#php #laravel #mysql 

Laravel 8 Import Export CSV/EXCEL File Example

In this post i will show you Laravel 8 Import Export CSV/EXCEL File Example. We will simple create import data to xls, csv file and also we will import data to database using csv file in laravel 8 application.

Using this example we can easily import-export and download the csv & excel file from the database using the maatwebsite/excel composer package. maatwebsite/excel provide easy way to import and export csv file in laravel 8 using database model.

Laravel 8 Import Export CSV/EXCEL File Example

https://websolutionstuff.com/post/laravel-8-import-export-csv-excel-file-example

#laravel 8 import export csv/excel file example #laravel 8 #import #export #csv/excel #import and export csv file in laravel 8

I am Developer

1617089618

Laravel 8 Tutorial for Beginners

Hello everyone! I just updated this tutorial for Laravel 8. In this tutorial, we’ll go through the basics of the Laravel framework by building a simple blogging system. Note that this tutorial is only for beginners who are interested in web development but don’t know where to start. Check it out if you are interested: Laravel Tutorial For Beginners

Laravel is a very powerful framework that follows the MVC structure. It is designed for web developers who need a simple, elegant yet powerful toolkit to build a fully-featured website.

Recommended:-Laravel Try Catch

#laravel 8 tutorial #laravel 8 tutorial crud #laravel 8 tutorial point #laravel 8 auth tutorial #laravel 8 project example #laravel 8 tutorial for beginners

I am Developer

1599536794

Laravel 8 New Features | Release Notes - Tuts Make

In this post, i will show you what’s new in laravel 8 version.

#What’s new in Laravel 8?

  • 1 - Change Path Of Default Models Directory
  • 2 - Removed Controllers Namespace Prefix
  • 3 - Enhancements on php artisan serve
  • 4 - Enhanced Rate Limiting
  • 5 - Enhanced on Route Caching
  • 6 - Update on Pagination Design
  • 8 - Dynamic Blade Componenets
  • 7 - Update Syntax for Closure Based Event Listeners
  • 8 - Queueable Model Event Listeners
  • 9 - Maintenance mode: secret access
  • 10 - Maintenance mode: pre-rendered page
  • 11 - Queued job batching
  • 12 - Queue backoff()
  • 13 - Laravel Factory

https://www.tutsmake.com/laravel-8-new-features-release-notes/

#laravel 8 features #laravel 8 release date #laravel 8 tutorial #news - laravel 8 new features #what's new in laravel 8 #laravel 8 release notes

Derrick  Ferry

Derrick Ferry

1656705960

Cómo Importar Datos CSV Y Excel A La Base De Datos MySQL En Laravel 8

La importación masiva de datos es una característica útil para agregar registros almacenados en un archivo a la base de datos. Los datos pueden almacenarse en formato CSV, Excel, XML, ODS, etc.

En este tutorial, muestro cómo puede importar datos CSV y Excel a la base de datos MySQL usando el paquete Laravel Excel en el proyecto Laravel 8.


1. Paquete de instalación

Requisito –

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpHoja de cálculo: ^1.21
  • psr/caché simple: ^1.0
  • Extensión PHP  php_zip habilitada
  • Extensión PHP  php_xml habilitada
  • Extensión PHP  php_gd2 habilitada
  • Extensión PHP  php_iconv habilitada
  • Extensión PHP  php_simplexml habilitada
  • Extensión PHP  php_xmlreader habilitada
  • Extensión PHP  php_zlib habilitada

Instale el paquete usando composer –

composer require maatwebsite/excel

Si recibe un error al ejecutar el comando anterior, ejecute el siguiente comando:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Después de eso nuevamente ejecute –

composer require maatwebsite/excel

2. Actualizar aplicación.php

  • Abrir  config/app.php archivo.
  • Agregue lo siguiente Maatwebsite\Excel\ExcelServiceProvider::class en  'providers' –
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Agregue lo siguiente  'Excel' => Maatwebsite\Excel\Facades\Excel::class en  'aliases' –
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Publicar paquete

Ejecute el comando –

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Esto creará un nuevo excel.phparchivo en formato config/.


4. Configuración de la base de datos

Abrir .envarchivo.

Especifique el host, el nombre de la base de datos, el nombre de usuario y la contraseña.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Crear tabla

  • Cree una nueva tabla Employeesmediante la migración y agregue algunos registros.
php artisan make:migration create_employees_table
  • Ahora, navegue a database/migrations/la carpeta desde la raíz del proyecto.
  • Encuentre un archivo PHP que termine con create_employees_tabley ábralo.
  • Defina la estructura de la tabla en el up()método.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Ejecute la migración –
php artisan migrate
  • La tabla ha sido creada.

6. Modelo

  • Crear Employeesmodelo.
php artisan make:model Employees
  • Abrir  app/Models/Employees.php archivo.
  • Especifique atributos de modelo asignables en masa: nombre de usuario, nombre, correo electrónico y edad utilizando la $fillablepropiedad.

Código completado

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Crear clase de importación

Estoy creando 2 clases de importación solo por ejemplo:

1. Clase de importación de empleados:

php artisan make:import EmployeesImport --model=Employees
  • Abrir  app/Imports/EmployeesImport.php archivo.
  • La clase tiene 1 método:
    • model (): lea los valores de $rowArray e inserte un registro si la identificación del correo electrónico no existe en la employeestabla; de lo contrario, devuelva nulo.

NOTA: esta clase de importación comienza a leer registros desde la primera fila. Expliqué cómo omitir la primera fila que contiene el encabezado en la siguiente clase de Importación.

Archivo CSV sin fila de encabezado –

usuario1Usuario1 u1usuario1@makitweb.com28
usuario2Usuario2 u2usuario2@makitweb.com24

Código completado

<?php
namespace App\Imports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\ToModel;

class EmployeesImport implements ToModel {
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row) {
 
       // Check email already exists
       $count = Employees::where('email',$row[2])->count();
       if($count > 0){
          return null;
       }
       return new Employees([
          'username' => $row[0],
          'name' => $row[1], 
          'email' => $row[2],
          'age' => $row[3],
       ]);
    }

}

2. Clase Employees2Import –

php artisan make:import Employees2Import --model=Employees
  • Abrir  app/Imports/Employees2Import.php archivo.
  • La clase tiene 2 métodos:
    • colección () - Valida $rowslos datos de la matriz. Si se valida con éxito, inserte el registro si la identificación del correo electrónico no existe en la employeestabla; de lo contrario, devolverá un error.

NOTA: si  WithHeadingRowse implementa, $rowsArrays contiene encabezados de fila como nombres clave en lugar de índice.

  • headerRow(): devuelve la posición del índice de encabezado.

Archivo CSV con fila de encabezado –

Nombre de usuarioNombreCorreo electrónicoAños
yssyogeshyogesh singhyogesh@makitweb.com28
bsonarikaSonarika Bhadoriabsonarika@makitweb.com28
vishalVishal Sahuvishal@makitweb.comtreinta y uno

Código completado

<?php

namespace App\Imports;

use App\Models\Employees;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Illuminate\Support\Facades\Validator;

class Employees2Import implements ToCollection ,WithHeadingRow
{

    public function collection(Collection $rows){

       // Validate
       Validator::make($rows->toArray(), [
          '*.username' => 'required|string',
          '*.name' => 'required|string',
          '*.email' => 'required|email',
          '*.age' => 'required|integer',
       ],[
          '*.username.required'=> "The username field is required.",
          '*.username.string'=> "The username must be string.",
          '*.name.required'=> "The name field is required.",
          '*.name.string'=> "The name must be string.",
          '*.email.required'=> "The email field is required.",
          '*.email.email'=> "The email must be a valid email address.",
          '*.age.integer'=> "The age must be an integer."
       ])->validate();

       foreach ($rows as $row) {

          // Check email already exists
          $count = Employees::where('email',$row['email'])->count();
          if($count > 0){
             continue;
          }
          Employees::create([
             'username' => $row['username'],
             'name' => $row['name'], 
             'email' => $row['email'],
             'age' => $row['age'],
         ]);
       }
    }

    // Specify header row index position to skip
    public function headingRow(): int {
       return 1;
    }
}

8. Ruta

  • Abrir  routes/web.php archivo.
  • Defina 3 rutas –
    • / –  Cargar vista de índice.
    • empleados/importdata: Publicar ruta para importar datos.
    • empleados/validar e importar datos: ruta de publicación para validar e importar datos.

Código completado

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::post('employees/importdata/', [EmployeesController::class, 'importData'])->name('employees.importdata');
Route::post('employees/validateandimportdata/', [EmployeesController::class, 'validateAndImportdata'])->name('employees.validateandimportdata');

9. Controlador

  • Crear  EmployeesController controlador.
php artisan make:controller EmployeesController
  • Abrir  app/Http/Controllers/EmployeesController.php archivo.
  • Importar   y  . EmployeesImportEmployees2ImportExcel
  • Crear 3 métodos –
    • index() – Cargar indexvista.
    • importdata() – Para importar llamar a Excel::import().

Pase 2 parámetros –

  1. EmployeesImportinstancia de clase.
  2. Pasar la ubicación 'temp' del archivo seleccionado.
    • validarAndImportdata() – Nuevamente llamar Excel::import().

Pase 2 parámetros –

  1. Employees2Importinstancia de clase.
  2. Pase la ubicación del archivo almacenado (he almacenado el archivo en una public/employees.xlsxcarpeta).

Código completado

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\EmployeesImport;
use App\Imports\Employees2Import;
use Excel;

class EmployeesController extends Controller
{
   public function index(){
      return view('index');
   }

   // Import data 
   public function importdata(Request $request){
      Excel::import(new EmployeesImport, $request->file('file')->store('temp'));
      return back()->with('success', 'Import successfully!');
   }

   // Validate and Import data 
   public function validateAndImportdata(Request $request){

      Excel::import(new Employees2Import, "employees.xlsx");
      return back()->with('success', 'Import successfully!');
   }

}

10. Ver

Crear  index.blade.php archivo en  resources/views/ carpeta.

Crear 2 <form>-

  • En la 1ra <form >acción fijada a {{ route('employees.importdata') }}. Cree un elemento de archivo y un botón de envío.
  • En la 2ª <form>acción fijada a {{ route('employees.validateandimportdata') }}. Crear un botón de envío.

Bucle $errors->all()para mostrar errores.

Código completado

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <title>How to Import data into MySQL database in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <!-- Success message -->
      @if(Session::has('success'))
         <div class="alert alert-success">
            {{ Session::get('success') }}
         </div>
      @endif

      <form method='post' action="{{ route('employees.importdata') }}" enctype="multipart/form-data">
         @csrf
         <div class="mb-3">
            <label for="file" class="form-label">File</label>
            <input type="file" class="form-control" id="file" name="file" value="">
         </div>

         <button type="submit" class="btn btn-success">Import</button>
      </form>

      <!-- Import data with validation -->
      <h2 class='mt-5'>Validate and import data</h2>
      {{-- Display errors --}}
      @if (count($errors) > 0)
         <div class="row">
            <div class="col-md-12 ">
                <div class="alert alert-danger">
                   <ul>
                      @foreach($errors->all() as $error)
                         <li>{{ $error }} </li>
                      @endforeach 
                   </ul> 
                </div>
            </div>
         </div>
      @endif

      <form method='post' action="{{ route('employees.validateandimportdata') }}" >
         @csrf
         <button type="submit" class="btn btn-success">Import</button>
      </form>
   </div>

</body>
</html>

11. Salida

Ver salida


12. Conclusión

Asegúrese de validar el registro antes de insertar o actualizar registros en la clase Importar. Especifique WithHeadingRowen Clase de importación solo si el archivo de importación tiene una fila de encabezado.

Fuente: https://makitweb.com

#laravel #php #mysql