Cara menggunakan laravel excel export collection

Okay di kesempatan kali ini aku mau berbagi pengalaman gimana caranya export data yang ada di laravel entah itu dari array atau dari custom query ke database yang nantinya menjadi file excel, dengan itu teman - teman bisa membuka melalui program lain seperti di microsoft office excel, wps office spreadsheet dan libreoffice calc atau bahkan oleh google spreadsheets untuk tujuannya diteruskan untuk dikelola data nya atau buat di print sebagai arsip.

Langsung saja untuk melakukan export atau generate data di laravel ke file excel kita perlu menginstal sebuah library Laravel excel bernama maatwebsite

<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
1. yang nantinya untuk menginstall dengan mengetikkan perintah
<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
2 di di CMD atau terminal pastikan terbuka dari folder project yang sudah terinstal Laravel hingga nantinya dari tutorial ini bertujuan bisa melakukan save file extension
<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
3 atau
<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
4.

jika belum meng install Laravel bisa ikuti cara install Laravel di posting saya sebelumnya Cara Install Laravel di Windows atau bisa mengikuti membuat rest api di Laravel pada posting Membuat REST API CRUD dengan Laravel serta JWT agar mudah untuk mengikuti tutorial ini.

di tutorial ini saya menggunakan studi kasus menggunakan database sakila mysql jika ingin mengikuti kalian bisa download dump backup database sakila di sini atau kunjungi link berikut https://dev.mysql.com/doc/index-other.html kemudian pilih download sakila database versi file zip, kemudian ektrak dan import databse-nya bisa ikuti tutorial di import databse mysql. di database Sakila berisikan data dummy sistem penyewaan rental film disana terdapat table film, actor, data pelanggan dan sebagainya.

Persiapan database Sakila di Laravel

disini saya menggunakan database sakila dari mysql sebagai dummy, karena database nya berbeda maka kita buat koneksinya terpisah dari database primary milik laravel.

'connections' => [
    ...
        'mysql-sakila' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE_SAKILA', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
    ...
]

setelah membuat konfigurasi database laravel kita buat model di laravel untuk table

<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
5, dengan membuat file
<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
6 di dalam folder
<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}
7 seperti berikut :

<?php

namespace App\Models;

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

class Film extends Model
{
    use HasFactory;
    protected $connection = "mysql-sakila";
    protected $table = "film";

}

Penjelasan :

  • <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class Film extends Model
    {
        use HasFactory;
        protected $connection = "mysql-sakila";
        protected $table = "film";
    
    }
    
    8 : memilih koneksi yang telah kita buat di file
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class Film extends Model
    {
        use HasFactory;
        protected $connection = "mysql-sakila";
        protected $table = "film";
    
    }
    
    9 yang sudah kita buat sebelumnya.
  • composer require maatwebsite/excel
    
    0 : memilih table yang digunakan model
    composer require maatwebsite/excel
    
    1.

Cara instal library Laravel excel maatwebsite

  1. ketikkan perintah berikut ini:

composer require maatwebsite/excel

perintah diatas untuk melakukan install library excel maatwebsite di laravel melalui composer

  1. kemudian tambahkan service provider di
    composer require maatwebsite/excel
    
    2 baris kode seperti dibawah ini:

'providers' => [
    /*
     * Package Service Providers...
     */
    Maatwebsite\Excel\ExcelServiceProvider::class,
]

Penjelasan:

  • tambahkan di dalam array
    composer require maatwebsite/excel
    
    3 yang berada di dalam kurung siku.
  1. selanjutnya tambahkan aliases di
    composer require maatwebsite/excel
    
    4 beberapa baris :

'aliases' => [
    ...
    'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

Penjelasan:

  • tambahkan baris kode di dalam array
    composer require maatwebsite/excel
    
    5 yang berada di dalam kurung siku.
  1. langkah terakhir menjalankan publish vendor dengan perintah di bawah ini :

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

Export data Laravel ke excel

  1. membuat class untuk Excel untuk proses export yang bisa digunakan secara dinamis, simpan baris kode di dibawah ini dalam file dan folder
    composer require maatwebsite/excel
    
    6

<?php
namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;

class ExcelExport implements FromArray, WithHeadings, ShouldAutoSize, WithTitle
{
    private $setData;
    private $setHeadings;
    private $setSheetTitle;

    public function __construct($data = [], $headings = [], $title = null)
    {
        $this->setData = $data;
        $this->setHeadings = $headings;
        $this->setSheetTitle = $title;
    }

    public function array(): array
    {
        return $this->setData;
    }

    public function headings(): array
    {
        return $this->setHeadings;
    }

    public function title(): string
    {
        return is_null($this->setSheetTitle) ? 'Main' : $this->setSheetTitle;
    }
}

Penjelasan :

  • baris kode di atas bertujuan untuk export secara dinamis yang dimana kita bisa menset header sesuka kita tanpa berpatokan ke databse key
  1. export data dari array ikuti langkah - langkah berikut
  • berikut ini contoh untuk export menggunakan array

use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ExcelExport;
$this->setHeadingsExportExcel = [
  'name',
  'phone',
  'address',
];

$this->sheetNameExportExcel = "test-title-sheet";

$data = [
  [
    'name' => 'Sigit N'
    'phone' => '0891313131'
    'address' => 'Banjar'
  ],
  [
    'name' => 'Hanafi S'
    'phone' => '0892424242'
    'address' => 'Langen'
  ],
  [
    'name' => 'Hanhan N'
    'phone' => '08925252525'
    'address' => 'Jabar'
  ],
];

$filename = 'file-export.xlsx';

Excel::store(new ExcelExport($data, $this->setHeadingsExportExcel, $this->sheetNameExportExcel), $filename, 'public');

Penjelasan :

  • file akan disimpan di
    composer require maatwebsite/excel
    
    7
  • data semua nya berbentuk array sehingga bisa dinamis
  1. export data dari query builder eloquent laravel ikuti langkah - langkah berikut :
  • menambahkan baris kode di
    composer require maatwebsite/excel
    
    8 berikut ini:


use  App\Http\Controllers\ExportController;

/* toExcelFilm */
Route::get('/export/film', [ExportController::class, 'toExcelFilm']);

  • lalu buat file controller baru saya gunakan dengan nama file
    composer require maatwebsite/excel
    
    9 adan isi file kode seperti berikut :

<?php
namespace App\Http\Controllers;

use App\Exports\ExcelExport;
use App\Models\Film;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Response;

class ExportController extends Controller
{
    public function toExcelFilm(){

        $data       = Film::all()->toArray();

        $dataHeader = array_keys($data[0]);
        $filename   = 'data-film-export.xlsx';

        try {
            Excel::store(new ExcelExport($data, $dataHeader, 'main'), $filename, 'public');

            return response()->download(storage_path('app\public\\' . $filename));
        } catch (\Exception $e) {
            return $e;
        }
    }
}

Penjelasan

  • isi kode php controller di atas berisikan perintah untuk melakukan export dan bisa melakukan download.
  • 'providers' => [
        /*
         * Package Service Providers...
         */
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ]
    
    0 proses ekport memanggil class
    'providers' => [
        /*
         * Package Service Providers...
         */
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ]
    
    1 dan menyimpan di folder public
  • 'providers' => [
        /*
         * Package Service Providers...
         */
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ]
    
    2 melakukan perintah download ketika kita mengakses secara get dengan url di
    'providers' => [
        /*
         * Package Service Providers...
         */
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ]
    
    3

Kesimpulan

dari tulisan di atas kita bisa melakukan export secara dinamis berbentuk array atau dari query builder laravel yang berbentuk array. \