Cara Membuat Export Excel dengan Filter Tanggal di Laravel
Apa Itu Export Excel dengan Filter Tanggal?
Fitur ini memungkinkan pengguna memilih tanggal awal dan tanggal akhir sebelum melakukan export.
Contohnya:
Tanggal Awal : 01 Agustus 2026
Tanggal Akhir : 23 Agustus 2026
↓
Export Excel
↓
Data 01–23 Agustus 2026
Dengan filter tanggal, pengguna tidak perlu mengunduh seluruh data dari database.
Install Laravel Excel
Package yang umum digunakan adalah Laravel Excel.
Install menggunakan Composer:
composer require maatwebsite/excel
Package ini menyediakan fitur untuk membuat file Excel dari data Laravel.
Membuat Export Class
Jalankan:
php artisan make:export TransactionExport --model=Transaction
File akan dibuat pada:
app/Exports/TransactionExport.php
Contoh sederhana:
<?php
namespace App\Exports;
use App\Models\Transaction;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class TransactionExport implements FromQuery, WithHeadings
{
public function __construct(
private string $startDate,
private string $endDate
) {
}
public function query()
{
return Transaction::query()
->whereBetween('transaction_date', [
$this->startDate,
$this->endDate
]);
}
public function headings(): array
{
return [
'ID',
'Tanggal',
'Pelanggan',
'Total',
'Status',
];
}
}
Dengan cara tersebut, query hanya mengambil data berdasarkan tanggal yang diberikan.
Membuat Form Filter
Pada halaman laporan, buat form sederhana:
<form method="GET" action="/transactions/export">
<input
type="date"
name="start_date"
required
>
<input
type="date"
name="end_date"
required
>
<button type="submit">
Export Excel
</button>
</form>
Pengguna dapat memilih periode sebelum melakukan export.
Membuat Controller
Pada controller:
use App\Exports\TransactionExport;
use Maatwebsite\Excel\Facades\Excel;
public function export(Request $request)
{
$request->validate([
'start_date' => ['required', 'date'],
'end_date' => ['required', 'date', 'after_or_equal:start_date'],
]);
return Excel::download(
new TransactionExport(
$request->start_date,
$request->end_date
),
'laporan-transaksi.xlsx'
);
}
Validasi after_or_equal memastikan tanggal akhir tidak lebih awal daripada tanggal mulai.
Membuat Route
Tambahkan route:
use App\Http\Controllers\TransactionController;
Route::get(
'/transactions/export',
[TransactionController::class, 'export']
)->name('transactions.export');
Sekarang URL export dapat digunakan oleh form.
Filter Berdasarkan Waktu
Jika kolom database menggunakan DATETIME, sebaiknya gunakan filter berdasarkan tanggal secara tepat.
Contohnya:
->whereBetween('created_at', [
$this->startDate . ' 00:00:00',
$this->endDate . ' 23:59:59',
])
Dengan demikian, transaksi pada seluruh tanggal akhir tetap ikut masuk.
Contoh:
01-08-2026 00:00:00
sampai
23-08-2026 23:59:59
Filter Berdasarkan Cabang
Untuk aplikasi multi-cabang, filter tanggal dapat digabungkan dengan cabang.
Contohnya:
public function query()
{
return Transaction::query()
->where('branch_id', $this->branchId)
->whereBetween('transaction_date', [
$this->startDate,
$this->endDate
]);
}
Form dapat memiliki:
Cabang : Bekasi
Tanggal Awal : 01 Agustus 2026
Tanggal Akhir: 23 Agustus 2026
Sehingga laporan hanya menampilkan transaksi cabang yang dipilih.
Filter Berdasarkan Status
Filter juga dapat digabungkan dengan status transaksi.
Contohnya:
->where('status', $this->status)
Maka pengguna dapat membuat laporan seperti:
Cabang : Bekasi
Periode : 01–23 Agustus 2026
Status : Paid
Mengapa Menggunakan FromQuery?
Untuk data sedikit, export sederhana sudah cukup.
Namun, jika data mencapai ribuan atau puluhan ribu baris, sebaiknya gunakan FromQuery agar data diambil dari database melalui query dan tidak perlu memuat seluruh data ke memory aplikasi sekaligus.
Contohnya:
class TransactionExport implements FromQuery
{
public function query()
{
return Transaction::query()
->whereBetween('transaction_date', [
$this->startDate,
$this->endDate
]);
}
}
Pendekatan ini lebih cocok untuk laporan dengan jumlah data besar.
Tambahkan Format Kolom
Export juga dapat dikembangkan dengan:
Format tanggal.
Format Rupiah.
Header laporan.
Auto width.
Border.
Filter Excel.
Freeze header.
Total transaksi.
Nama perusahaan.
Periode laporan.
Contohnya:
LAPORAN TRANSAKSI
Periode:
01 Agustus 2026 - 23 Agustus 2026
Total Transaksi: 1.245
Total Penjualan : Rp125.500.000
Kemudian data transaksi ditampilkan di bawahnya.
Export Data yang Besar
Jika data sangat besar, proses export sebaiknya tidak dilakukan langsung pada request pengguna.
Gunakan queue:
User
↓
Request Export
↓
Laravel Queue
↓
Generate Excel
↓
File disimpan
↓
User mendapatkan notifikasi
Pendekatan ini lebih aman untuk laporan yang membutuhkan waktu lama.
Optimasi Database
Filter tanggal akan lebih cepat jika kolom yang digunakan memiliki index yang sesuai.
Contohnya:
$table->index('transaction_date');
Untuk kombinasi cabang dan tanggal:
$table->index([
'branch_id',
'transaction_date'
]);
Index perlu disesuaikan dengan pola query yang benar-benar digunakan aplikasi.
Kesalahan yang Sering Terjadi
Tidak Memvalidasi Tanggal
Pengguna dapat memasukkan tanggal yang tidak valid atau periode terbalik.
Mengambil Semua Data Dahulu
Hindari:
Transaction::all();
kemudian melakukan filter menggunakan PHP.
Lebih baik filter langsung pada database.
Tidak Memperhatikan Jam
Jika menggunakan DATETIME, pastikan tanggal akhir mencakup sampai 23:59:59.
Export Terlalu Besar
Untuk data besar, gunakan query-based export dan pertimbangkan queue.
Tidak Menggunakan Index
Query laporan dengan jutaan data dapat menjadi lambat tanpa index yang tepat.
Contoh Alur Lengkap
User membuka halaman laporan
↓
Memilih tanggal awal
↓
Memilih tanggal akhir
↓
Klik Export Excel
↓
Laravel melakukan validasi
↓
Query mengambil data sesuai periode
↓
Laravel membuat file Excel
↓
File diunduh
Dengan alur tersebut, pengguna dapat membuat laporan sesuai periode tanpa perlu melakukan export seluruh database.
Export Excel Laravel Bersama Ovla Media
Ovla Media dapat membantu mengembangkan fitur laporan dan export Excel untuk berbagai aplikasi bisnis, seperti:
Point of Sales.
Sistem klinik.
Inventory.
Sistem koperasi.
Sistem multi-cabang.
CRM.
Laporan keuangan.
Dashboard bisnis.
Sistem administrasi.
Aplikasi Laravel custom.
Export juga dapat dikembangkan dengan filter cabang, produk, status, pengguna, periode, hingga laporan otomatis melalui queue.
Kesimpulan
Export Excel dengan filter tanggal merupakan fitur sederhana tetapi sangat berguna untuk aplikasi bisnis.
Konsep utamanya adalah:
Filter Tanggal
↓
Validasi
↓
Query Database
↓
Export Excel
Untuk data kecil, proses export dapat dilakukan langsung.
Untuk data besar, gunakan query-based export, database index, dan queue agar proses tetap stabil.
Dengan filter yang tepat, pengguna dapat menghasilkan laporan berdasarkan periode, cabang, status, atau kebutuhan operasional lainnya tanpa harus mengunduh seluruh data aplikasi.
Artikel Terkait
Cara Membuat QR Code untuk Verifikasi Invoice Laravel
QR Code pada invoice dapat digunakan untuk membantu pelanggan memverifikasi keaslian dan status dokumen secara online. Dengan Laravel, QR Code dapat diarahkan ke halaman verifikasi yang menampilkan nomor invoice, tanggal, nominal, dan status pembayaran tanpa perlu membuka database secara langsung.
Cara Deploy Laravel ke VPS Ubuntu Menggunakan Nginx dan PHP-FPM
Deploy Laravel ke VPS Ubuntu membutuhkan beberapa komponen seperti Nginx, PHP-FPM, database, Composer, dan konfigurasi permission. Dengan konfigurasi yang tepat, aplikasi Laravel dapat berjalan lebih stabil dan aman di server production.
Cara Mengatasi Permission Denied pada Folder Storage Laravel
Error “Permission Denied” pada folder storage Laravel biasanya terjadi karena user yang menjalankan PHP tidak memiliki izin untuk membaca atau menulis file. Masalah ini sering muncul setelah deployment, migrasi server, perubahan owner folder, atau penggunaan Laravel pada VPS dan cPanel.