Cara menggunakan php method scope

Laravel Scope – Haloo semuanya, Assalaamualaikum wr wb..

Framework Laravel memiliki banyak sekali trick-trick magic yang dapat membantu kalian dalam mendevelop sebuah aplikasi..

Salah satunya yaitu Laravel Scope..

Daftar Isi

  • 1 Apa Itu Laravel Scope?
    • 1.1 Global Scope
    • 1.2 Local Scope
      • 1.2.1 Cara menulis Local Scope
      • 1.2.2 Syarat penulisan Local Scope
      • 1.2.3 Cara membawa Parameter kedalam Scope
  • 2 Support Us
    • 2.1 Share this:
    • 2.2 Like this:
    • 2.3 Related

Apa Itu Laravel Scope?

intinya laravel scope itu untuk mempermudah kita agar tidak menulis query yang sama berulang-ulang..

Laravel scope sendiri sebetulnya terdapat 2 jenis, yaitu Global Scope dan Local Scope..

Global Scope

Untuk global scope / Global Where sebelumnya kita sudah pernah membahas nya, silahkan kalian kunjungin artikel nya disini: Membuat Global Where Pada Eloquent Laravel..

Jadi dengan global scope, kita hanya perlu menulis query nya 1 kali saja didalam model nya, maka nanti secara otomatis query tersebut akan selalu terpanggil ketika kita menggunakan model tersebut, tanpa harus menulis lagi query nya..

Local Scope

Local Scope sebetulnya sama seperti global scope, hanya saja kita perlu memanggil initial scope nya kembali didalam query nya..

Misalkan sebagai contoh kita memiliki beberapa method yang menarik data Customer dengan ketentuan yang status nya aktif saja..

Biasanya kita akan menuliskannya seperti berikut:

// method index 
public function index[]
{
    $data = M_customer::where['is_active', 1]->get[]; // menarik data customer yg status nya aktif
}

// method show 
public function show[]
{
    $data = M_customer::where['is_active', 1]->get[]; // menarik data customer yg status nya aktif
}

Pada 2 method diatas, didalam query nya kita sama-sama menarik data customer yang status nya aktif saja..

Itu baru 2 method, bagaimana kalo ternyata di controller lain kita juga akan menarik data customer yang aktif saja?? Maka kita akan menulis query where is_active=1 secara terus menerus dan berulang-ulang..

Tentu saja hal ini sangat tidak efisien, kenapa? karena kita menulis query yang sama secara berulang-ulang..

Coba bayangkan gimana kalau suatu saat ternyata kondisi nya berubah, yang awal nya is_active=1 kemudian berubah menjadi is_active=’active’.. Maka kita perlu merubah semua query nya pada setiap method dan pada setiap controller..

Solusi nya yaitu dengan menggunakan local scope..

kalian cukup menambahkan local scope pada model M_customer seperti berikut:

....
public function scopeActive[$e]
{
    return $e->where['is_active', 1];
}
....

Kemudian di query nya kalian hanya perlu memanggil nya seperti berikut:

....
// method index 
public function index[]
{
    $data = M_customer::active[]->get[]; // menarik data customer yg status nya aktif 
}
// method show 
public function show[]
{
    $data = M_customer::active[]->get[]; // menarik data customer yg status nya aktif 
}
....

Terlihat lebih simple dan ringkas, yang awal nya selalu menulis ->where[‘is_active’,1].. sekarang hanya perlu menulis ->active[] saja..

Dan jikapun nanti ada perubahan query nya, kita hanya perlu merubah di function scope nya saja..

Syarat penulisan Local Scope

Syarat penulisan Local Scope yaitu:

1. Diawali dengan kata scope pada nama function nya..

....
public function scopeActive[$e]{
....

2. nama function nya ditulis dengan gaya Camel Case

Untuk lebih memahami tentang gaya penulisan Camel Case, bisa kalian kunjungi halaman berikut disini..

3. Pada saat pemanggilan scope nya didalam query, kita tidak perlu lagi menulis kata “scope”..

Cara membawa Parameter kedalam Scope

Misalkan kita ingin membuat nilai pada scope nya menjadi dinamis, kita bisa memberikan nya satu atau lebih parameter kedalam nya..

Misalkan sebagai contoh:

namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
    /**
     * Scope a query to only include users of a given type.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @param  mixed  $type
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeOfType[$query, $type]
    {
        return $query->where['type', $type];
    }
}

Kemudian pada query nya kita bisa memanggil nya seperti berikut:

....
$users = User::ofType['admin']->get[];
....

Support Us

Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: //saweria.co/sangcahayaid

Terima kasih..

Bài mới nhất

Chủ Đề