Published January 17, 2022

How do I export data to excel in Laravel PHP

In this post, we will look at how we can export data to excel in Laravel PHP. We will use the maatwebsite/excel package to export our data. This package provides the best way to export data as Excel Files or CSV Files.

Exporting data to Excel in Laravel PHP

Step 1: First of all, create a new Laravel project using the command below

composer create-project --prefer-dist laravel/laravel LaravelExcel

 

Export data to Excell sheet laravel php

 

A new project is installed on your server 

Step 2: Run the command below to create  a model with Migration: php artisan make: model Student -m

Export data to Excell sheet laravel php 2

Now, let's create a table and define the table fields by storing information about students. We can do this by opening Student.php and pasting the code below

<? php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Student extends Model

{

  • use HasFactory;

  •  

    • public $fillable = [

        'id',

        'name',

        'email',

        'city'

];

}

 

Student.php

Export data to Excell sheet laravel php 3

Step 3: Let's create a data table. Open the database/migration, then open the migration file 2022_01_14_225625_create_students_table.php

 

Export data to Excell sheet laravel php 4

 

Paste the code below

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema; 

class CreateStudentsTable extends Migration

{

/**

    * Run the migrations.

     *

     * @return void

     */

public function up()

{

    Schema::create('students', function (Blueprint $table) {

            $table->id();

            $table->string('name');

            $table->string('email');

            $table->string('city');

            $table->timestamps();

        });

}

/**

* Reverse the migrations.

     *

     * @return void

     */

public function down()

{

        Schema::dropIfExists('students');

}

}

 

We are going to create a table using the fields above. To do this, run the following command

php artisan migrate

 

Step 4: · Next, let's install the maatwebsite/excel package using the command below

composer require maatwebsite/excel

 

Export data to Excell sheet laravel php 5

With this package, we can export data into an Excel file. Now, open config/app.php and add an alias and service provider

'providers' => [

      ....

     Maatwebsite\Excel\ExcelServiceProvider::class,

],

'aliases' => [

      ....

     'Excel' => Maatwebsite\Excel\Facades\Excel::class,

],

 

Step 5: To enable navigating in our  web pages, we’ll need  to define  routes. To do this, open  routes/web.php and paste the code below

Route::resource('student', StudentController::class);

Route::get('student_export',[StudentController::class, 'get_student_data'])->name('student.export');

 

Step 6: Let's create an export class and define  the connected model by running the command below

php artisan make: export StudentExport --model=Student

Export data to Excell sheet laravel php 6

To export data to our Excel file, we need to go to app/Exports/StudentExport.php and paste the following code:

<?php

namespace App\Exports; 

use App\Models\Student;

use Maatwebsite\Excel\Concerns\WithHeadings;

use Maatwebsite\Excel\Concerns\FromCollection; 

class StudentExport implements FromCollection,WithHeadings

{

/**

* @return \Illuminate\Support\Collection

*/

public function headings():array{

return[

            'Id',

            'Name',

            'Email',

            'City',

            'Created_at',

            'Updated_at'

        ];

}

public function collection()

{

        return Student::all();

}

}

 

  • Step 7: Now, let’s create a controller.  First,  run the command below to make a request. php artisan make::request StoreStudentRequest. Then, run this command to create  the resource controller for writing the logic: php artisan make: controller StudentController –resource

Finally, open app/Http/Controllers/StudentController.php and paste the code below

 

<?php

namespace App\Http\Controllers;

use App\Models\Student;

use Illuminate\Http\Request;

use App\Exports\StudentExport;

use Maatwebsite\Excel\Facades\Excel;

use App\Http\Requests\StoreStudentRequest; 

class StudentController extends Controller

{

/**

     * Display a listing of the resource.

     *

     * @return \Illuminate\Http\Response

     */

public function index()

{

        $students = Student::paginate(5);      

        return view('student.index',compact('students'));

}

 

/**

     * Show the form for creating a new resource.

     *

     * @return \Illuminate\Http\Response

     */

public function create()

{

        return view('student.create');

}

/**

     * Store a newly created resource in storage.

     *

     * @param  \Illuminate\Http\Request  $request

     * @return \Illuminate\Http\Response

     */

public function store(StoreStudentRequest $request)

{

        $student = new Student;

        $student->name = $request->name;

        $student->email = $request->email;

        $student->city = $request->city;

        $student->save();

        return redirect(route('student.index'))->with('success','Data submited successfully!');

}

/**

     * Display the specified resource.

     *

     * @param  int  $id

     * @return \Illuminate\Http\Response

     */

public function show($id)    //

}

/**

     * Show the form for editing the specified resource.

     *

     * @param  int  $id

    * @return \Illuminate\Http\Response*/

public function edit($id)

{//

}

/**

     * Update the specified resource in storage.

     *

     * @param  \Illuminate\Http\Request  $request

     * @param  int  $id

     * @return \Illuminate\Http\Response

    */

public function update(Request $request, $id)

{//

}

/**

     * Remove the specified resource from storage.

     *

     * @param  int  $id

     * @return \Illuminate\Http\Response

    */

public function destroy($id)

{

//

}

public function get_student_data()

{

return Excel::download(new StudentExport, 'students.xlsx');

}

}

 

Step 8: Now let’s display our details and add record. To do this, create a file, main.blade.php, and paste the code below

<!doctype html>

<html lang="en">

  <head>

    <!-- Required meta tags -->

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

             <title>@yield('title')</title>

  </head>

  <body>

@yield('content')        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"  integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"

crossorigin="anonymous"

   />

  </body>

</html>

 

Create create.blade.php and paste the code below:

@extends('layout.main') 

@section('title')

Registration form

@endsection 

@section('content')

<div class="container">

<h2 class="text-center mt-3">Student Registration Form</h2>

<form action="{{ route('student.store') }}"  method="POST">

        @csrf

        <div class="mb-3">

            <label for="Name" class="form-label">Name</label>

            <input type="text" class="form-control @error('name')  is-invalid  @enderror" id="name" name="name" value="{{ old('name') }}">

            @error('name')

            <div class="text-danger">{{ $message }}</div>

            @enderror

        </div>        

        <div class="mb-3">

            <label for="email" class="form-label">Email</label>

            <input type="text" class="form-control @error('email')  is-invalid  @enderror" id="email" name="email" value="{{ old('email') }}">

            @error('email')

            <div class="text-danger">{{ $message }}</div>

          @enderror

        </div>          

        <div class="mb-3">

            <label for="city" class="form-label">City</label>

            <input type="text" class="form-control @error('city')  is-invalid  @enderror" id="city" name="city" value="{{ old('city') }}">

            @error('city')

            <div class="text-danger">{{ $message }}</div>

            @enderror

        </div>

    <button type="submit" class="btn btn-primary">Submit</button>

</form>

</div>

@endsection

 

Create index.blade.php and paste the code below

@extends('layout.main') 

@section('title')

Student Data

@endsection 

@section('content')

<div class="container mt-3">

@if ($message = session('success'))

<div class="alert alert-success mx-1" role="alert">{{ $message }}

</div>

    @endif

<h2 class=" text-center">Student Data</h2>

<div class="mt-5">

         <a href="{{ route('student.export') }}" class="btn btn-primary">

             Export Data

        </a>

        <a href="{{ route('student.create') }}" class="btn btn-primary">

            Add Data

    </a>

</div>

<table class="table table-hover mt-5">

        <thead>

            <tr>

                <th>ID</th>

                <th>Name</th>

                <th>Email</th>

                <th>City</th>

            </tr>

        </thead>

        <tbody>

            @foreach ($students as $student)

                  <tr>

                      <td>{{ $student->id }}</td>

                      <td>{{ $student->name }}</td>

                      <td>{{ $student->email }}</td>

                      <td>{{ $student->city }}</td>

                  </tr>

            @endforeach

     </tbody>

</table>

<div class="mt-5">

    {{ $students->links() }}

</div>

</div>

@endsection

 

We are done, let's run our application. It works as expected

Export data to Excell sheet laravel php 7

 

 

Download Source code