Pernah nggak, kamu susah payah bikin tabel data keren di web, terus klien atau dosen minta "bisa di-download ke Excel nggak?" — dan kamu langsung panik? Tenang, kamu nggak sendirian. Fitur export excel pdf datatables laravel ini adalah salah satu permintaan paling umum di proyek web, tapi sering banget bikin bingung developer pemula.
Kabar baiknya: Laravel punya ekosistem package yang luar biasa. Dengan Maatwebsite Laravel Excel dan Barryvdh Laravel DomPDF, kamu bisa tambahkan fitur download Excel dan PDF ke DataTables kamu dalam hitungan menit — bukan jam, bukan hari.
Di artikel ke-49 dari Seri Belajar Laravel Lengkap ini, kita bakal kupas tuntas step by step, dari instalasi package, setup controller, hingga tombol export yang beneran berfungsi. Let's code!
Export data di konteks web berarti mengubah data dari database (yang tampil di tabel) menjadi file yang bisa diunduh — seperti .xlsx (Excel) atau .pdf. Di Laravel, proses ini dilakukan di sisi server: controller mengambil data → diproses package → menghasilkan file → dikirim ke browser sebagai response download.
📤 Kenapa Fitur Export Excel & PDF di DataTables Laravel Itu Wajib Ada?
Bayangkan kamu punya toko online dan memiliki 10.000 data transaksi di web app-mu. Data itu tampil rapi di DataTables Laravel. Tapi tiba-tiba bagian keuangan minta laporan bulanan untuk diolah di Excel, atau manajemen minta laporan PDF untuk dicetak dan ditanda-tangani.
Di sinilah fitur export data dari DataTables jadi hero. Tanpa fitur ini, user harus copy-paste manual — yang jelas nggak mungkin untuk data ribuan baris. Fitur export bukan cuma "nice to have", ini adalah kebutuhan nyata di hampir semua aplikasi enterprise.
Package Maatwebsite Laravel Excel sudah diunduh lebih dari 100 juta kali di Packagist. Artinya hampir semua project Laravel komersial menggunakannya. Ini bukan sekedar package biasa — ini sudah jadi standar industri!
Pilih Package yang Tepat: Perbandingan Cepat
📊 Step-by-Step: Export Excel dari DataTables Laravel
Anggap export Excel itu seperti "mencetak foto" dari database kamu ke dalam format spreadsheet. Yang kita butuhkan: data dari model, sebuah "Export Class" sebagai cetakannya, dan route yang memicunya. Berikut langkah lengkapnya:
Install Package Maatwebsite Excel
Buka terminal di root project Laravel kamu dan jalankan perintah berikut:
composer require maatwebsite/excel
Setelah selesai, publish config-nya:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
Buat Export Class
Jalankan artisan command untuk membuat class export:
php artisan make:export UsersExport --model=User
File akan dibuat di app/Exports/UsersExport.php. Edit isinya:
<?php namespace App\Exports; use App\Models\User; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class UsersExport implements FromCollection, WithHeadings { public function collection() { return User::select('id', 'name', 'email', 'created_at')->get(); } public function headings(): array { return ['ID', 'Nama', 'Email', 'Tanggal Daftar']; } }
Gunakan WithHeadings interface agar baris pertama file Excel secara otomatis berisi header kolom yang readable. Tanpanya, Excel akan menggunakan nama field database langsung — yang kadang nggak user-friendly.
Buat Controller & Route untuk Export Excel
Di controller, tambahkan method export:
use App\Exports\UsersExport; use Maatwebsite\Excel\Facades\Excel; // Di dalam class controller: public function exportExcel() { return Excel::download( new UsersExport(), 'data-users-' . date('Y-m-d') . '.xlsx' ); }
Tambahkan route di routes/web.php:
Route::get('/users/export-excel', [UserController::class, 'exportExcel']) ->name('users.export.excel');
Tambahkan Tombol Export di Blade (View)
Di file Blade tempat DataTables kamu berada, tambahkan tombol download:
<div class="mb-3 d-flex gap-2"> <a href="{{ route('users.export.excel') }}" class="btn btn-success"> 📊 Export Excel </a> <a href="{{ route('users.export.pdf') }}" class="btn btn-danger"> 📄 Export PDF </a> </div>
📄 Export PDF dari DataTables Laravel dengan DomPDF
Kalau export Excel itu ibarat "menyalin" data ke spreadsheet, maka export PDF lebih seperti "mencetak" tampilan yang sudah didesain. DomPDF mengambil template Blade HTML kamu, lalu mengkonversinya menjadi dokumen PDF yang bisa langsung dibagikan atau dicetak.
Install Package DomPDF
composer require barryvdh/laravel-dompdf
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Buat Blade Template untuk PDF
Buat file resources/views/exports/users-pdf.blade.php:
<!DOCTYPE html> <html><head> <style> body { font-family: Arial, sans-serif; font-size: 12px; } h2 { text-align: center; color: #6366f1; } table { width: 100%; border-collapse: collapse; } th { background: #6366f1; color: white; padding: 8px; } td { border: 1px solid #ddd; padding: 8px; } tr:nth-child(even) { background: #f9fafb; } </style></head><body> <h2>Data Users</h2> <p>Dicetak: {{ date('d/m/Y H:i') }}</p> <table> <thead><tr> <th>No</th><th>Nama</th><th>Email</th><th>Daftar</th> </tr></thead> <tbody> @foreach($users as $i => $user) <tr> <td>{{ $i+1 }}</td> <td>{{ $user->name }}</td> <td>{{ $user->email }}</td> <td>{{ $user->created_at->format('d/m/Y') }}</td> </tr> @endforeach </tbody></table> </body></html>
Method Controller & Route untuk Export PDF
use Barryvdh\DomPDF\Facade\Pdf; public function exportPdf() { $users = User::select('id','name','email','created_at')->get(); $pdf = Pdf::loadView('exports.users-pdf', compact('users')) ->setPaper('a4', 'landscape'); return $pdf->download('data-users-'.date('Y-m-d').'.pdf'); }
Route::get('/users/export-pdf', [UserController::class, 'exportPdf']) ->name('users.export.pdf');
Method download() langsung mengirim file ke browser. Kalau kamu mau menampilkan PDF di browser (bukan langsung download), ganti dengan stream(). Keduanya menerima nama file sebagai parameter pertama.
🔗 Integrasi Export Excel & PDF dengan DataTables Server-Side
Kalau kamu menggunakan DataTables Server-Side (seperti yang kita bahas di artikel sebelumnya), ada perbedaan penting: tombol export tidak boleh hanya mengambil data yang tampil di halaman, melainkan harus mengambil seluruh data yang sedang aktif terfilter dari database.
Solusinya adalah meneruskan parameter filter (search, sort) yang aktif ke URL export. Begini caranya:
- Simple, tidak perlu handle filter
- Cocok untuk laporan lengkap
- Query langsung ke Model
- UX lebih baik, ekspor sesuai konteks
- Butuh passing parameter search ke URL
- Perlu query builder yang fleksibel
Tambahkan JavaScript ini di halaman DataTables kamu untuk membuat tombol export yang "sadar filter":
// Ambil nilai search dari input DataTables function exportWithFilter(type) { const search = $('input[type=search]').val(); const baseUrl = type === 'excel' ? '{{ route("users.export.excel") }}' : '{{ route("users.export.pdf") }}'; window.location.href = baseUrl + '?search=' + encodeURIComponent(search); } // Panggil dari tombol: // <button onclick="exportWithFilter('excel')">Export Excel</button>
Di controller, tangkap parameter search tersebut:
public function exportExcel(Request $request) { $search = $request->query('search', ''); return Excel::download( new UsersExport($search), 'users-' . date('Y-m-d') . '.xlsx' ); }
Untuk data yang sangat besar (> 50.000 baris), gunakan queued export dari Maatwebsite Excel agar proses berjalan di background job dan tidak timeout. Cukup implement interface ShouldQueue di Export Class kamu.
Tags:
📚 Navigasi Seri Belajar Laravel
No comments:
Post a Comment