Langsung ke konten utama

Cara Implementasi Global Scope di Laravel untuk Logika Otomatis

Pendahuluan

Bayangin lagi ngerjain fitur sederhana, tapi kamu harus nambahin where('active', 1) di setiap query yang manggil model user. Awalnya kelihatan enteng, tapi pas query-nya nambah jadi puluhan file, risiko lupa nambahin filter itu jadi ancaman nyata. Di sinilah Global Scope di Laravel jadi penyelamat hidup saya biar nggak terus-terusan kena bug data yang seharusnya 'tersembunyi'.

Tips & Best Practices

  • Di banyak project, biasanya saya mulai dari bikin class scope terpisah agar logika filter tidak menumpuk di file model yang sudah panjang.
  • Saat nentuin nama scope, pastikan namanya deskriptif seperti ActiveScope atau PublishedScope agar rekan tim lain paham tanpa harus baca isi logic-nya.
  • Selalu cek apakah logic yang kamu buat perlu di-bypass atau nggak, karena terkadang kita butuh ngambil data yang 'dihapus' atau 'non-aktif' untuk keperluan admin dashboard.

Contoh Kode

Kalau mau bikin scope otomatis, buat class yang implement interface Scope. Ini contoh pas mau filter data yang cuma statusnya 'published':

// App/Scopes/PublishedScope.php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class PublishedScope implements Scope {
    public function apply(Builder $builder, Model $model) {
        $builder->where('status', 'published');
    }
}

Lalu di model kamu, tinggal panggil di method booted:

protected static function booted() {
    static::addGlobalScope(new PublishedScope);
}

Variasi Implementasi

Kadang kita nggak mau ribet bikin class baru. Kamu bisa pakai addGlobalScope dengan Closure kalau filternya cuma satu baris, jauh lebih ringkas. Tapi, kalau filternya kompleks atau bakal dipakai di banyak model, mending dipisah jadi class supaya nggak bikin file model kamu jadi 'god object' yang sulit dirawat.

Kesalahan Umum

  • Lupa kalau Global Scope bakal kena ke semua query, termasuk pas kamu mau update atau delete data secara massal.
  • Sering terjebak saat harus akses data yang di-filter, padahal tinggal pakai Model::withoutGlobalScope(ScopeName::class)->get().
  • Memasukkan logic yang berat atau akses DB lain di dalam scope yang bikin aplikasi jadi lambat banget karena dijalankan tiap kali model di-query.
  • Bingung sendiri pas scope yang dibuat malah konflik dengan query manual yang kamu tulis di Controller.
  • Tidak mengetes scope saat melakukan eager loading, yang kadang bikin relasi jadi nggak muncul karena filter yang terlalu ketat.

Ringkasan

Jujur, Global Scope itu ibarat 'asisten otomatis' yang bikin kode lebih bersih dan minim duplikasi. Tapi ingat, jangan pakai berlebihan untuk logika yang terlalu spesifik. Pakai sewajarnya, dokumentasikan dengan baik, dan aplikasi Laravel kamu bakal jauh lebih rapi dibanding pas pertama kali nulis manual satu-satu.

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?