Logo
© 2019 - 2026 SantriKoding.

On This Page

Mobile navigation

2
0
0
SHARE

Solusi N+1 Query dengan Laravel Query Detector

like emoticon 0
love emoticon 0
insightful emoticon 2
fire emoticon 0
cheer emoticon 0
celebrate emoticon 0
Solusi N+1 Query dengan Laravel Query Detector

Halo teman-teman semuanya, pernah nggak sih kita merasa aplikasi Laravel yang kita bangun “kok makin lama makin berat”, padahal fitur yang ditambahkan tidak terlalu banyak? Salah satu penyebab yang paling sering terjadi adalah masalah N+1 query, relasi Eloquent yang dipanggil berulang-ulang karena kita lupa menerapkan eager loading.

Di artikel ini, kita akan membahas Laravel Query Detector dari Beyond Code, sebuah package yang membantu mendeteksi N+1 query secara otomatis saat development, lalu memberi peringatan agar kita langsung tahu bagian mana yang perlu diperbaiki.

Apa itu N+1 Query dan Kenapa Berbahaya?

Secara sederhana, N+1 query terjadi ketika kita mengambil data utama menggunakan satu query, lalu untuk setiap data tersebut Laravel menjalankan query tambahan untuk relasi yang sama.

Contoh yang sering tidak disadari:

$posts = Post::all();

foreach ($posts as $post) {
    echo $post->author->name; // memicu query tambahan berkali-kali
}

Kode di atas terlihat normal. Namun di balik layar, Laravel bisa menjalankan banyak query tambahan tergantung jumlah data Post. Kalau Data Post ada 100 data, bisa jadi total query-nya 101. Ini bikin performa turun, terutama saat halaman ramai atau data makin besar.

Mengenal Laravel Query Detector

Laravel Query Detector adalah package yang bertugas “mengawasi” query Eloquent saat aplikasi berjalan di mode development. Ketika pola N+1 query terdeteksi, package ini akan memberi tahu bahwa relasi tertentu seharusnya di-eager load.

Dengan pendekatan ini, kita bisa memperbaiki performa sejak awal, sebelum masalah tersebut terbawa ke production.

Selengkapnya: https://beyondco.de/docs/laravel-query-detector/installation

Instalasi Laravel Query Detector

Proses instalasinya sangat sederhana dan dilakukan melalui Composer sebagai dependency development:

composer require beyondcode/laravel-query-detector --dev

Setelah instalasi selesai, package ini akan otomatis ter-register, sehingga kita tidak perlu menambahkan service provider secara manual.

Karena dipasang dengan flag --dev, package ini hanya aktif di environment development dan aman digunakan dalam proses pengembangan sehari-hari.

Cara Kerja Saat Aplikasi Dijalankan

Ketika aplikasi Laravel berjalan dengan APP_DEBUG=true, Laravel Query Detector akan aktif secara otomatis.

Saat kita membuka halaman yang mengandung N+1 query, package ini akan menampilkan notifikasi peringatan di browser. Tujuannya sederhana, yaitu memberi sinyal bahwa ada relasi yang dipanggil berulang dan perlu dioptimasi. Dengan cara ini, kita tidak perlu menebak-nebak atau menghitung query secara manual.

Contoh Kasus dan Solusinya

Misalnya kita memiliki halaman daftar post dan menampilkan nama author di setiap post.

Controller:

$posts = Post::all();

return view('posts.index', compact('posts'));

Blade view:

@foreach ($posts as $post)
  <p>{{ $post->author->name }}</p>
@endforeach

Kode seperti ini sangat rentan menyebabkan N+1 query.

Solusi yang tepat adalah menggunakan eager loading:

$posts = Post::with('author')->get();

Dengan pendekatan ini, Laravel hanya menjalankan query yang diperlukan secara efisien, bukan banyak query kecil yang berulang.

Publish Config (Opsional)

Jika kita ingin mengatur perilaku notifikasi atau output dari Laravel Query Detector, kita bisa melakukan publish konfigurasi:

php artisan vendor:publish --provider="BeyondCode\QueryDetector\QueryDetectorServiceProvider"

Setelah itu akan muncul file config/querydetector.php. Melalui file ini, kita bisa mengatur apakah peringatan ditampilkan melalui alert browser, log, atau mekanisme lain sesuai kebutuhan.

Kesimpulan

Laravel Query Detector adalah tool atau library yang sangat berguna untuk mendeteksi masalah N+1 query sejak tahap development. Dengan instalasi yang sederhana dan mekanisme kerja otomatis, package ini membantu kita menjaga performa aplikasi Laravel tanpa perlu melakukan pengecekan query secara manual.

Dengan adanya peringatan langsung saat N+1 query terjadi, kita bisa lebih disiplin menggunakan eager loading dan memastikan aplikasi tetap cepat, bersih, dan siap digunakan di production.

Terima Kasih

Blog ini dibaca sebanyak 598 kali

Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CEO & Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komentar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

Memuat komentar...