Cara menggunakan laravel excel export api

Melanjutkan artikel sebelumnya (https://soft-gain.com/2020/06/07/kirim-email-menggunakan-laravel-dan-smtp-gmail/), berikut ini adalah tutorial export excel menggunakan laravel. Untuk bisa export atau import data dalam bentuk excel dengan laravel, kita akan menggunakan library laravel-excel/maatwebsite (https://github.com/Maatwebsite/Laravel-Excel).

Pertama-tama kita akan install terlebih dahulu library yang akan kita gunakan untuk meng-export data dari database ke dalam bentuk excel. Ketikan perintah berikut ini :

composer require "maatwebsite/excel:~2.1.0" 

NOTE : kita akan menggunakan versi 2.1, karena di latest version ada fungsi yang hendak kita pakai namun sudah tidak bisa di gunakan.

Selanjutnya kita tambahkan baris ini pada router kita :

Route::get('/transaksi/export', 'sg_transaksi@export');

Selanjutnya kita akan menambahkan fungsi ini pada controller sg_transaksi.php :

public function export(){
        $data = DB::table('sg_transaksi')->select('sg_barang.nama_barang','sg_transaksi.jenis_transaksi','sg_transaksi.jumlah_barang','a.name as created_by','b.name as updated_by','sg_transaksi.updated_at')->join('sg_barang','sg_barang.id','=','sg_transaksi.id_barang')->join('users as a','a.id','=','sg_transaksi.created_by')->leftJoin('users as b','b.id','=','sg_transaksi.updated_by')->get()->toArray();
        $data_array[] = array('Nama Barang', 'Jenis Transaksi', 'Jumlah Transaksi', 'Dibuat Oleh', 'Terakhir Ubah', 'Tanggal');

        foreach($data as $trx)
        {
            $data_array[] = array(
                'Nama Barang'  => $trx->nama_barang,
                'Jenis Transaksi'   => $trx->jenis_transaksi,
                'Jumlah Transaksi'    => $trx->jumlah_barang,
                'Dibuat Oleh'  => $trx->created_by,
                'Terakhir Ubah'   => $trx->updated_by,
                'Tanggal'   => date('d M Y',strtotime($trx->updated_at))
            );
        }

        Excel::create('export-to-excel', function($excel) use ($data_array) {
            $excel->setTitle('Transaksi Data');
            $excel->sheet('Transaksi Data', function($sheet) use ($data_array){
                $sheet->fromArray($data_array, null, 'A1', false, false);
            });
        })->export('csv');
    }

Jangan lupa juga untuk menambahkan library yang sudah kita install tadi :

use Excel;
use DB; // YANG INI SAYA TAMBAHKAN KARENA QUERY EXPORT SAYA TIDAK MENGGUNAKAN ELOQUENT TETAPI MENGGUNAKAN DB STATEMENT

Secara sederhana, fungsi export hanya berisi query dari table transaksi yang hasilnya kita jadikan array lalu kita memanggil fungsi create dari library excel (maatwebsite/laravel-excel) yang mana hasilnya kita kembalikan ke client dalam bentuk file. Saya akan mencoba menjabarkannya satu persatu.

Pada bagian ini kita akan meng-query data pada table transaksi, barang dan user :

$data = DB::table('sg_transaksi')->select('sg_barang.nama_barang','sg_transaksi.jenis_transaksi','sg_transaksi.jumlah_barang','a.name as created_by','b.name as updated_by','sg_transaksi.updated_at')->join('sg_barang','sg_barang.id','=','sg_transaksi.id_barang')->join('users as a','a.id','=','sg_transaksi.created_by')->leftJoin('users as b','b.id','=','sg_transaksi.updated_by')->get()->toArray();

Pada bagian ini kita memasukan array ke dalam variable data_array, array ini lah yang akan kita gunakan sebagai header dari data yang akan kita export :

$data_array[] = array('Nama Barang', 'Jenis Transaksi', 'Jumlah Transaksi', 'Dibuat Oleh', 'Terakhir Ubah', 'Tanggal');

Berikutnya kita masukan data hasil query kita sebelumnya ke dalam variable data_array :

foreach($data as $trx)
        {
            $data_array[] = array(
                'Nama Barang'  => $trx->nama_barang,
                'Jenis Transaksi'   => $trx->jenis_transaksi,
                'Jumlah Transaksi'    => $trx->jumlah_barang,
                'Dibuat Oleh'  => $trx->created_by,
                'Terakhir Ubah'   => $trx->updated_by,
                'Tanggal'   => date('d M Y',strtotime($trx->updated_at))
            );
        }

Terakhir kita panggil fungsi dari library laravel-excel dan kita buat file nya dalam bentuk csv :

Excel::create('export-to-excel', function($excel) use ($data_array) {
            $excel->setTitle('Transaksi Data');
            $excel->sheet('Transaksi Data', function($sheet) use ($data_array){
                $sheet->fromArray($data_array, null, 'A1', false, false);
            });
        })->export('csv');

Lalu terakhir kita tambahkan code berikut ini pada file table.blade.php pada folder view transaksi :

<a class="btn btn-success" href="{{ url('transaksi/export') }}">
   Export to Excel
</a>

Demikian lah tutorial export excel menggunakan laravel, seperti biasa full source nya bisa di ambil di repo saya (https://github.com/ImmanuelJL/belajar-laravel), cabang aplikasi-stok-barang (https://github.com/ImmanuelJL/belajar-laravel/tree/aplikasi-stok-barang). Terima kasih.