Yoga Image

Yogaardiana

Portfolio
  • Portfolio
  • Articles
HomePortfolioArticles

© 2026 Yogaardiana. Tous droits réservés.

Profile Picture About Author - yogaardiana
AuteurYogaardiana
Publié7 months ago

Laravel Local Scope: Rahasia Code Rapi yang Sering Dilupakan Pemula

Query Controller Berantakan? Rapikan dengan Laravel Local Scope


Pernah nggak sih, kamu buka file Controller project lama, terus rasanya pengen nutup lagi saking pusingnya?

Saya pernah. Dulu, waktu masih awal-awal belajar Laravel (zaman newbie), saya punya kebiasaan buruk: menulis logic query database mentah-mentah di dalam Controller.

Bayangin skenario ini: Kamu diminta menampilkan daftar user yang aktif dan sudah verifikasi email. Di Controller, kodingan kamu mungkin terlihat seperti ini:


$users = User::where('is_active', 1)
->where('email_verified_at', '!=', null)
->orderBy('created_at', 'desc')
->get();


Kelihatannya oke, kan? Masalahnya baru muncul ketika requirements yang sama dibutuhkan di halaman lain. Misalnya, di Dashboard Admin, di Laporan Bulanan, atau di fitur Notifikasi.


Akhirnya, kamu melakukan "dosa" terbesar developer: Copy-Paste code tersebut ke mana-mana.


Lalu, bencana datang. Bos kamu bilang, "Mas, logika user aktif diganti ya. Sekarang user aktif itu kalau is_active = 1 DAN subscription_end > today."


Panik dong? Kamu harus cari satu per satu file dimana query itu dipaste, lalu ubah manual. Kalau ada 10 file, mungkin masih sanggup. Kalau 50? Good luck with that.


Nah, di sinilah Laravel Local Scope hadir sebagai penyelamat hidup kita.


Apa Itu Laravel Local Scope?

Biar gampang, anggap saja Local Scope itu seperti shortcut atau preset filter favorit kamu.


Kalau di kehidupan nyata, bayangin kamu lagi pesan kopi. Daripada bilang: "Mbak, pesan kopi, gulanya sedikit, pakai susu oat, es-nya dikit aja, terus di-blend ya."

Kamu cukup bilang: "Mbak, pesan Kopi Spesial Saya satu."


Si barista (Laravel) udah ngerti racikannya, karena kamu sudah definisikan sebelumnya. Dalam kodingan, Local Scope membungkus logika query yang ribet menjadi satu method yang punya nama jelas dan mudah dibaca (human readable).


Cara Implementasi (Gampang Banget!)

Mari kita ubah kodingan "spaghetti" di atas jadi lebih elegan menggunakan Local Scope.


Langkah 1: Definisikan di Model

Buka model User.php kamu. Kita akan buat dua scope: satu untuk user aktif, satu untuk user verified.

Aturannya simpel: Nama method harus diawali kata scope, diikuti nama scopenya. Contoh: scopeActive.


// App\Models\User.php

// Untuk Laravel 12 / Terbaru
use Illuminate\Database\Eloquent\Attributes\Scope;

#[Scope]
protected function active(Builder $query): void
{
// Ini racikan "Kopi Spesial" kamu
return $query->where('is_active', 1);
}

#[Scope]
protected function verified(Builder $query): void
{
// Ini racikan "Kopi Spesial" kamu
return $query->where('email_verified_at', '!=', null);
}


// Versi laravel di Bawah 12
public function scopeActive(Builder $query): void
{
$query->where('is_active', 1);
}

public function scopeVerified(Builder $query): void
{
$query->where('email_verified_at', '!=', null);
}



Langkah 2: Panggil di Controller

Sekarang, balik lagi ke Controller yang berantakan tadi. Kita bisa panggil scope tersebut tanpa awalan kata scope. Cukup panggil namanya saja dalam format camelCase.


Before (Ribet):

$users = User::where('is_active', 1)
->where('email_verified_at', '!=', null)
->orderBy('created_at', 'desc')
->get();


After (Elegan & Cantik):

$users = User::active()
->verified()
->orderBy('created_at', 'desc')
->get();


Coba baca kodingan yang baru. "User active verified get". Rasanya seperti membaca kalimat bahasa Inggris biasa, kan? Inilah yang disebut Expressive Code.


Kenapa Kamu Wajib Pakai Ini?


Selain bikin kodingan terlihat ganteng, ada manfaat teknis yang nyata:

  1. DRY (Don't Repeat Yourself): Tulis logikanya sekali di Model, pakai berkali-kali di mana saja.
  2. Easy Maintenance: Inget kasus bos minta ubah logika user aktif tadi? Dengan Local Scope, kamu cuma perlu ubah satu baris di User.php, dan otomatis semua halaman yang pakai scope active() akan ikut berubah. No more panic!
  3. Debugging Lebih Cepat: Kalau ada error query, kamu tahu pasti di mana harus nge-cek.


Kesimpulan

Sebagai developer, tugas kita bukan cuma bikin aplikasi yang "jalan", tapi juga bikin kode yang bisa "hidup" jangka panjang.


Laravel Local Scope adalah fitur sederhana, tapi efeknya besar banget buat kebersihan kode kamu. Mulailah dari hal kecil seperti ini untuk membiasakan diri menulis Clean Code.

Jadi, coba cek project kamu sekarang. Masih banyak where bertebaran di Controller? Yuk, mulai refactor!


Sumber : https://laravel.com/docs/12.x/eloquent#local-scopes


Bantu Support Aku :

Instagram : https://www.instagram.com/yogaardianaaa/

Youtube : https://www.youtube.com/@yogaardiana_dev/

Tiktok : https://tiktok.com/@yogaardianaaa

Threads : https://www.threads.com/@yogaardianaaa