Laravel 10 Import Export Excel and CSV File Tutorial

Laravel 10, Importing and exporting Excel and CSV files in Laravel can provide several benefits for managing and manipulating data within your application.

Importing and exporting files allows you to transfer data between your Laravel application and external systems or platforms. This can be useful for integrating with other software, exchanging data with clients or partners, or migrating data from one system to another.

Step 1: Install Laravel App

composer create-project laravel/laravel example-pagination

Step 2: Install maatwebsite/excel Package

composer require maatwebsite/excel

Step 3: Create Dummy Records

php artisan tinker
User::factory()->count(10)->create()

Step 4: Create Import Class

php artisan make:import UsersImport --model=User

app/Imports/UsersImport.php

<?php
  
  namespace App\Imports;
    
  use App\Models\User;
  use Maatwebsite\Excel\Concerns\ToModel;
  use Maatwebsite\Excel\Concerns\WithHeadingRow;
  use Hash;
    
  class UsersImport implements ToModel, WithHeadingRow
  {
      /**
      * @param array $row
      *
      * @return \Illuminate\Database\Eloquent\Model|null
      */
      public function model(array $row)
      {
          return new User([
              'name'     => $row['name'],
              'email'    => $row['email'], 
              'password' => Hash::make($row['password']),
          ]);
      }
  }

Step 5: Create Export Class

php artisan make:export UsersExport --model=User

app/Exports/UsersExport.php

<?php
  
  namespace App\Exports;
    
  use App\Models\User;
  use Maatwebsite\Excel\Concerns\FromCollection;
  use Maatwebsite\Excel\Concerns\WithHeadings;
    
  class UsersExport implements FromCollection, WithHeadings
  {
      /**
      * @return \Illuminate\Support\Collection
      */
      public function collection()
      {
          return User::select("id", "name", "email")->get();
      }
    
      /**
       * Write code on Method
       *
       * @return response()
       */
      public function headings(): array
      {
          return ["ID", "Name", "Email"];
      }
  }
  

Step 6: Create Controller

php artisan make:controller UserController

app/Http/Controllers/UserController.php

<?php
  
  namespace App\Http\Controllers;
    
  use Illuminate\Http\Request;
  use App\Exports\UsersExport;
  use App\Imports\UsersImport;
  use Maatwebsite\Excel\Facades\Excel;
  use App\Models\User;
    
  class UserController extends Controller
  {
      /**
      * @return \Illuminate\Support\Collection
      */
      public function index()
      {
          $users = User::get();
    
          return view('users', compact('users'));
      }
          
      /**
      * @return \Illuminate\Support\Collection
      */
      public function export() 
      {
          return Excel::download(new UsersExport, 'users.xlsx');
      }
         
      /**
      * @return \Illuminate\Support\Collection
      */
      public function import() 
      {
          Excel::import(new UsersImport,request()->file('file'));
                 
          return back();
      }
  }

Step 7: Create Routes

routes/web.php 

<?php
  
  use Illuminate\Support\Facades\Route;
    
  use App\Http\Controllers\UserController;
    
  /*
  |--------------------------------------------------------------------------
  | Web Routes
  |--------------------------------------------------------------------------
  |
  | Here is where you can register web routes for your application. These
  | routes are loaded by the RouteServiceProvider within a group which
  | contains the "web" middleware group. Now create something great!
  |
  */
   
  Route::controller(UserController::class)->group(function(){
      Route::get('users', 'index');
      Route::get('users-export', 'export')->name('users.export');
      Route::post('users-import', 'import')->name('users.import');
  });

Step 8: Create Blade File

resources/views/users.blade.php 

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 10 Import Export Excel to Database Example - webthestuff.com</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
     
<div class="container">
    <div class="card bg-light mt-3">
        <div class="card-header">
            Laravel 10 Import Export Excel to Database Example - webthestuff.com
        </div>
        <div class="card-body">
            <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
                @csrf
                <input type="file" name="file" class="form-control">
                <br>
                <button class="btn btn-success">Import User Data</button>
            </form>
  
            <table class="table table-bordered mt-3">
                <tr>
                    <th colspan="3">
                        List Of Users
                        <a class="btn btn-warning float-end" href="{{ route('users.export') }}">Export User Data</a>
                    </th>
                </tr>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Email</th>
                </tr>
                @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                </tr>
                @endforeach
            </table>
  
        </div>
    </div>
</div>
     
</body>
</html>

Run Laravel App:

php artisan serve

Now, Go to web browser, type the given URL and see the output:

http://localhost:8000/users