Langsung ke konten utama

Memahami Query Scopes di Laravel untuk Reusable Query Logic

Pendahuluan

Bayangin lagi ngerjain fitur sederhana, tapi tiap kali narik data user yang 'aktif', kamu nulis where('status', 'active') berulang-ulang di berbagai controller. Awalnya kelihatan oke, sampai akhirnya logic status itu berubah, dan kamu harus 'berburu' di seluruh codebase buat ngupdate satu baris kode. Laravel sebenernya udah nyediain penyelamat yang namanya Query Scopes buat ngerapiin kekacauan kayak gini.

Tips & Best Practices

  • Di banyak project, biasanya saya mulai dari menamai scope dengan awalan 'scope'. Ini ngebantu banget biar pas dipanggil di controller, kodenya jadi kerasa kayak bahasa manusia biasa, misalnya User::active()->get().
  • Pernah kejadian saya salah naruh logic yang kompleks di controller, akhirnya saya pindahin ke Local Scope biar unit testing-nya jauh lebih mudah.
  • Saya selalu nyaranin buat pakai Global Scope cuma buat hal-hal yang 'mutlak' harus ada di tiap query, kayak sistem soft delete atau tenant-based filtering, biar nggak bikin pusing di masa depan.

Contoh Kode

Ini cara saya biasa nerapin Local Scope di model User biar query jadi bersih:

// Di dalam User.php
public function scopeActive($query) {
    return $query->where('status', 'active');
}

// Cara pakainya di Controller
$users = User::active()->get();

Variasi Implementasi

Kadang kita butuh scope yang dinamis, contohnya mau filter berdasarkan tanggal. Saya biasanya pakai parameter tambahan: public function scopeRegisteredBetween($query, $from, $to) { ... }. Ini jauh lebih fleksibel daripada bikin banyak scope spesifik. Kalau mau yang otomatis jalan di tiap request, Global Scope memang pilihan utama, tapi hati-hati karena dia 'memaksa' logic-nya di setiap query, kadang malah bikin query jadi lambat kalau modelnya lagi di-join banyak table.

Kesalahan Umum

  • Lupa kalau scope harus selalu me-return instance $query, akhirnya malah ngembaliin null dan bikin error yang susah dicari.
  • Terlalu banyak pakai Global Scope sampai lupa kalau kita sebenernya nggak butuh filter itu di semua tempat, alhasil performa database malah jadi tumbal.
  • Ngasi nama scope yang ambigu, bikin rekan setim bingung maksudnya filter ini buat apa sebenarnya.
  • Nulis logic bisnis yang terlalu berat di dalam scope, padahal scope cuma buat ngatur query, bukan buat kalkulasi ribet.
  • Lupa nge-chaining scope dengan benar, kadang urutan pemanggilan scope bisa ngaruh ke hasil akhir query kalau ada operator orWhere yang nyempil di tengah.

Ringkasan

Memahami Query Scopes itu bukan cuma soal rapi-rapiin kode, tapi soal investasi biar besok-besok pas requirement berubah, kamu nggak perlu lembur buat benerin logic yang kesebar dimana-mana. Intinya, kalau kamu merasa nulis query yang sama lebih dari dua kali, itu tanda waktunya pake scope.

Komentar

Postingan populer dari blog ini

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Cara Reset Password Database MySQL Menggunakan Laragon

Cara Reset Password Database MySQL Menggunakan Laragon Laragon adalah salah satu lingkungan pengembangan lokal (local development environment) yang populer di antara para pengembang web. Dalam beberapa kasus, mungkin kita perlu mereset password database MySQL pada Laragon jika lupa password atau untuk alasan keamanan tertentu. Berikut adalah langkah-langkah yang dapat kita ikuti untuk melakukan reset password database MySQL menggunakan Laragon:

Apa Itu R dan L di Headset? Ini Dia Perbedaan dan Fungsinya yang Perlu Anda Ketahui

Arti R dan L di Headset: Apa Perbedaannya? Headset adalah alat yang digunakan untuk mendengarkan suara dari sumber audio seperti ponsel, komputer, atau pemutar musik. Headset biasanya terdiri dari dua bagian, yaitu earphone yang dimasukkan ke dalam telinga dan mikrofon yang digunakan untuk berbicara. Pada earphone, kita sering melihat ada tulisan R dan L. Apa arti dan perbedaan dari kedua huruf tersebut?