Tutorial 23 Aug 2026 2 Kali Dibaca

Cara Membuat Export Excel dengan Filter Tanggal di Laravel

Gugun Nurdiansyah
Penulis
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:

  1. Format tanggal.

  2. Format Rupiah.

  3. Header laporan.

  4. Auto width.

  5. Border.

  6. Filter Excel.

  7. Freeze header.

  8. Total transaksi.

  9. Nama perusahaan.

  10. 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:

  1. Point of Sales.

  2. Sistem klinik.

  3. Inventory.

  4. Sistem koperasi.

  5. Sistem multi-cabang.

  6. CRM.

  7. Laporan keuangan.

  8. Dashboard bisnis.

  9. Sistem administrasi.

  10. 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.

#Laravel Excel #Export Excel Laravel #Filter Tanggal Laravel #Laravel Export #Laravel Report #Laporan Excel #PHP Laravel #Laravel Query #Laravel Database #Laravel Queue #Laravel Multi-Cabang #Export Data Laravel #Sistem Laporan #Dashboard Laravel #Web Development #Aplikasi Bisnis #Ovla Media #Jasa Laravel #Jasa Pembuatan Aplikasi
Beranda Produk Artikel
Konsultasi
OVLA

Navigasi Utama

Hubungi Kami

Mulai Konsultasi Sekarang