
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi pas buka Laravel Debugbar, saya kaget lihat jumlah query yang tembus puluhan cuma buat nampilin list data user. Masalah ini sering banget muncul gara-gara N+1 problem yang bikin aplikasi mendadak lemot pas data di database mulai numpuk. Awalnya saya pikir nambah RAM server bakal ngeberesin masalah, padahal kuncinya ada di cara kita 'narik' relasi modelnya.
Tips & Best Practices
Di banyak project, biasanya saya mulai dari memetakan kebutuhan view sebelum nulis query controller agar tidak ada relasi yang 'nganggur'. Sebisa mungkin, saya pakai Eager Loading hanya untuk data yang benar-benar bakal dirender di browser supaya memori tetap hemat. Terakhir, saya selalu membiasakan diri ngecek Debugbar setiap kali selesai bikin fitur list untuk memastikan tidak ada query duplikat yang terpicu di dalam loop.
Contoh Kode
Daripada akses relasi di dalam loop yang memicu query berulang, saya lebih suka pakai with() seperti ini:
// Hindari ini di controller
$users = User::all();
// Gunakan ini untuk optimasi
$users = User::with('posts')->get();
// Pas di view, datanya udah ready tanpa perlu query lagi
foreach ($users as $user) {
echo $user->posts->count();
}Variasi Implementasi
Kadang saya pakai load() kalau objek modelnya sudah terlanjur di-fetch, misalnya pas saya dapet object dari service class yang belum include relasinya. Ada juga loadMissing() yang jadi favorit saya kalau nggak yakin apakah relasi itu udah di-load sebelumnya atau belum, jadi lebih aman dari query ganda. Kalau cuma butuh kolom tertentu biar query lebih ringan, saya sering pakai with('posts:id,user_id,title') untuk membatasi data yang ditarik.
Kesalahan Umum
- Seringkali kita lupa pakai
with()karena buru-buru, padahal cuma nambah satu kata. - Nambahin relasi ke
$withproperty di model padahal jarang dipakai di semua view. - Melakukan filter di relasi tapi lupa nge-load relasi itu sendiri.
- Mengabaikan query count yang muncul di debug bar saat testing.
- Salah kaprah pake
load()berulang-ulang di dalam loop yang justru bikin query makin banyak.
Ringkasan
Urusan query relationship di Laravel itu sebenernya soal ketelitian. Makin sering kita sadar sama apa yang terjadi di balik layar, makin enteng aplikasi yang kita bangun. Jangan sampai aplikasi kita jadi 'berat' cuma gara-gara kita terlalu males nambahin satu baris kode with() yang sebenernya bisa menyelamatkan performa jutaan request.
Komentar
Posting Komentar