Laravel ile Eloquent Scope Kullanımı

Sorgu Kapsamları

Laravel‘de Eloquent ORM(Object Relation Mapping) sınıfını kullanarak uzun uzun SQL sorguları yazmaktan kurtuluruz. Bu makalede Eloquent modellerine alt fonksiyonlar yazarak bunları proje sürecinde bir çok yerde kullanarak sizi tekrara düşmekten kurtaran bir çözümdür.

Örnek: Makaleler::all(); bu geriye tüm kayıtları döndürür. Ama bizim ihtiyacımız olan özel koşullar olabilir bunu where ile sorgulayabilirsiniz ama birden fazla yerde aynı sorgulamayı yapmak yerine laravelin sağladığı Model Scope çözümüne bakalım.

Makaleler tablosundan aktif olanlarını where sorgusu ile alalım.

Makaleler tablomuz var bu tabloda birde aktif sütunumuz var aktif olanlar 1 olmayan ise 0 olarak kaydediliyor.

$aktifMakaleler = Makaleler::where('aktif', 1)->get();

Ama benim buna diğer modüllerde de ihtiyacım olacak ve tekrar tekrar where sorgusu yazmam gerekecek. Scope çözümü burada devreye giriyor.

class Makaleler extends Model 
{
public function scopeAktif($query)
{
return $query->where('aktif', 1);
}
}

Yukarıdaki tanımlamada Laravel scope‘un bir takma ad olduğunu biliyor. Ve artık aktif makaleleri Makaleler::aktif()->get(); olarak alabileceğim.

Dinamik Scope Oluşturalım

Bu scope‘a bir parametre gönderebiliriz.

class Makaleler extends Model 
{
public function scopeAktif($query, $value)
{
return $query->where('aktif', $value);
}
}

Artık dinamik olarak kulanabiliriz.

// Aktif makaleleri getir
$aktifMakaleler = Makaleler::aktif(1)->get();

// Aktif olmayan makaleleri getir
$aktifOlmayanMakaleler = Makaleler::aktif(0)->get();

İlişkile ile scope kullanımı

$kategori = Kategoriler::find(1);
$aktifMakaleler = $kategori->makaleler()->aktif(1)->get();
PHP içinde yayınlandı

Bir cevap yazın