Pendahuluan
Dalam berbagai case dari sebuah aplikasi, kadang kita dihadapkan dengan sebuah kondisi dimana client menginginkan sebuah output berupa excel dari data yang telah dihimpun dari aplikasi tersebut. Hal ini tentu saja disebabkan karena latar belakang dari user berbeda-beda sehingga dibutuhkan persamaan pandangan dengan menggunakan format yang sudah familiar di masyarakat.
Fokus kita kali ini adalah bagaimana membuat laporan dengan menggunakan Laravel Excel versi 3.0, sebab terjadi perbedaan yang cukup berbeda dari versi sebelumnya.
Baca Juga: Membuat Aplikasi POS (Point of Sales) Laravel 5.6 (Part 5)
Install Laravel Excel 3.0
Hal pertama yang harus dilakukan adalah meng-install package tersebut, gunakan composer:
composer require maatwebsite/excel
Karena pada artikel ini saya menggunakan Laravel fresh install, maka sebagai contoh dalam memahami penggunaan library ini, kita akan menggunakan table bawaan dari Laravel saja, yakni table users
. Buat dummy data terlebih dahulu dengan Model Factory.
Saya asumsikan, teman-teman sudah memiliki sample data di dalam table users
, untuk menyeragamkan data nya, silahkan buat 20 records saja.
Basic Usage
Pertama, buat folder Exports
di dalam folder app
yang berfungsi untuk menyimpan file custom export class. Kemudian buat file UserReport.php
ke dalam folder Exports tersebut.
<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;
class UserReport implements FromCollection
{
public function collection()
{
return User::all();
}
}
Buat UserController.php
dengan command:
php artisan make:controller UserController.php
Kemudian modifikasi menjadi:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Excel;
use App\Exports\UserReport;
class UserController extends Controller
{
public function laporanExcel()
{
return Excel::download(new UserReport, 'users.xlsx');
}
}
Penjelasan: Fungsi yang terdapat di dalam method diatas adalah untuk men-download file excel menggunakan Facade dengan memanggil custom class yang telah dibuat yakni UserReport, dimana UserReport tersebut me-return data dari table users
secara keseluruhan dan kemudian men-download-nya dengan nama file users.xlsx
.
Jangan lupa definisikan routenya:
Route::get('/excel', 'UserController@laporanExcel');
Kemudian running, maka kamu akan mendapatkan file excel dengan format.
Big Data With From Query
Sebagaimana yang dijelaskan di dokumentasinya, cara diatas adalah best practise untuk menangani data yang tergolong menengah, apabila telah memiliki data yang cukup banyak maka package ini menawarkan fungsi lain untuk membuat performace eksekusinya menjadi lebih baik, yakni dengan menggunakan FromQuery
.
Masih menggunakan file yang sama, yakni UserReport.php
, kita modifikasi menjadi:
<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromQuery;
class UserReport implements FromQuery
{
public function query()
{
return User::query();
}
}
Output yang dihasilkan akan tetap sama dengan yang sebelumnya, dan letak perbedaannya akan terasa apabila telah menyangkut jumlah data yang cukup besar.
Sebenarnya kita juga dapat meng-inject custom class yang telah dibuat dengan mengambil data dari luar, misalnya saja saya ingin mengambil data yang memiliki name akhirannya PhD (baca: kebetulan dummy data yang saya punya, memiliki dua records dengan kondisi tersebut), dimana parameter ini dikirimkan dari controller, buka file UserReport.php
kemudian modifikasi menjadi:
<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromQuery;
class UserReport implements FromQuery
{
public function __construct(string $name)
{
$this->name = $name;
}
public function query()
{
return User::query()->where('name', 'like', '%'. $this->name);
}
}
Penjelasan: class ini secara default meminta parameter berupa string, yang kemudian query-nya kita tambahkan kondisi dimana akhiran kata mengandung karakter yang diterima dengan menggunakan where like.
Dari controller fungsinya menjadi:
...
public function laporanExcel()
{
return Excel::download(new UserReport('phd'), 'users.xlsx');
}
...
Note: Sebagaimana yang dilihat, kita mengirimkan string pdh ke UserReport.
Maka hasilnya hanya akan me-return data yang di cari
Custom View With From View
Mungkin diantara teman-teman terbiasa melakukan format dokumen menggunakan html, maka package ini juga menyediakan fungsi lainnya agar dapat me-load data tersebut dari file html / blade di Laravel. Buat UserReport.php kemudian modifikasi menjadi:
<?php
namespace App\Exports;
use App\User;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\Exportable;
class UserReport implements FromView
{
use Exportable;
public function view(): View
{
return view('excel.users', [
'users' => User::all()
]);
}
}
Kemudian buat view-nya dengan nama users.blade.php
di dalam folder excel
:
<table>
<thead>
<tr>
<th>No</th>
<th>Name</th>
<th>Email</th>
<th>Register At</th>
</tr>
</thead>
<tbody>
@php $no = 1 @endphp
@foreach($users as $user)
<tr>
<td>{{ $no++ }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->created_at }}</td>
</tr>
@endforeach
</tbody>
</table>
Dari UserController.php
, karena kita menggunakan Exportable
maka kita tidak perlu menggunakan facade Excel lagi. Sehingga dapat ditulis seperti ini:
...
public function laporanExcel()
{
return (new UserReport)->download('users.xlsx');
}
...
Sehingga report yang di hasilkan akan tampak seperti ini
Baca Juga: Membuat Chart Google Analystic Server Side Authorization Dengan PHP
Kesimpulan
Sebenarnya masih banyak lagi fungsi yang disediakan dari package ini, namun akan dibahas dalam artikel berbeda agar tidak terlalu panjang karena belakangan ini daengweb banyak menulis artikel yang sangat panjang, yang mungkin saja membuat jenuh teman-teman pembaca.
Apa yang telah dibahas diatas adalah hal dasar dari penggunakan package ini, yang sudah dapat kamu terapkan dalam aplikasi yang akan dibuat.
Comments