Export Collection ke format excel

Jika aplikasi anda mempunyai data collection yang banyak, kadang kala dibutuhkan untuk bisa diexport ke format excel. Untuk itu dibutuh kan package. package ini sebagai alternatif jika anda sudah menggunakan datatables, akan tetapi output dari file nya kurang bisa di sesuaikan dengan kebutuhan. Oleh karena itu kali ini, kita akan menggunakan package excel.

a. Silahkan install package melalui composer

composer require maatwebsite/excel

atau silahkan buka link berikut untuk panduan instalasi nya : https://laravel-excel.com/

b. Tambahkan sebuah file php yang akan digunakan untuk memanggil fungsi export excel

<?php

namespace App\Exports;

use Illuminate\Http\Request;
use App\Models\Invoice;
use Carbon\Carbon;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;

class ExportDataOrder implements FromQuery, WithHeadings
{
    use Exportable;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function query()
    {
        return $this->exportDefault($this->request);
    }

    public function headings(): array
    {
        return [
            "NAMA PRODUK","VARIAN PRODUK", "SATUAN", "KD ORDER",  "NAMA TOKO",
            "KOTA",  "STATUS", "QUANTITY",
            "CATATAN", "DATE ORDER" 
        ];
    }


public function exportDefault(Request $request) {
    
     $exportData = Order::with('product')->Orderby('id','desc')->get();
        return $exportData;
    }
}

class diatas berfungsi untuk memangil collection dari Order dengan mengambil relasi master produk, dengan sort order by id order. untuk header pada hasil export bisa di custom pada function heading

c. Tambahkan controller yg akan digunakan untuk mengatur export excel tersebut (contoh ExportCSVController.php)


<?php

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Product;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ExportDataOrder;
use Carbon\Carbon; 
use DB;
use Illuminate\Support\Facades\Session;

class ExportCSVController extends Controller
{
    public function exportXLS (Request $request){

        date_default_timezone_set("Asia/Jakarta");
        $d = strtotime("now");
        $time = date("d-m-Y H:i:s", $d);
        $filename = $time."_LOGS_ORDER.xlsx";
        return Excel::download(new ExportDataOrder($request), $filename);

    }
}

untuk nama hasil export saya gunakan waktu export dilakukan, sehingga akan memudahkan tracking kapan file tersebut dilakukan

d. Tambahkan routing pada file route web.php

Route::any('/exportxls', 'ExportCSVController@exportXLS')->name('order.export');


e. SIlahkan running laravel anda dengan php artisan serve, kemudian buka route yang sudah anda buat sebelumnya "/exportxls"

Wassalam,

selamat mencoba