Laravel'de Veritabanı Sorgularında Scope Kullanımı

Laravel'de  Veritabanı Sorgularında  Scope Kullanımı
Hüseyin Erbayat Okuma Sayısı: 24

Laravel'de Veritabanı Sorgularında Scope Kullanımı

Scope Nedir?

Scope, belirli bir model üzerinde sıkça kullanılan bir sorguyu temsil eder. Örneğin, bir "Post" modelinde sıkça kullanılan "yayınlanmış" yazıları çekmek için bir scope oluşturabiliriz. Bu şekilde, aynı sorguyu tekrar tekrar yazmak yerine, bu scope'u kullanarak sorguyu daha okunabilir hale getirebiliriz.

Scope Nasıl Oluşturulur?

Bir scope oluşturmak için, model sınıfında bir fonksiyon tanımlamamız gerekir. Bu fonksiyon, scope kelimesi ile başlamalıdır. Örneğin, "published" durumundaki yayınlanmış yazıları çekmek için bir scope oluşturalım:

class Post extends Model
{
    public function scopePublished($query)
    {
        return $query->where('published', true);
    }
}
    

Scope Kullanımı

Oluşturduğumuz scope'u kullanarak sorgularımızı daha okunabilir hale getirebiliriz:

$publishedPosts = Post::published()->get();
    

Yukarıdaki örnekte, published() scope'u, "published" durumunda olan tüm yazıları çeker.

Parametreli Scope

Scope'lara parametre de gönderebiliriz. Örneğin, belirli bir tarihten önce yayınlanmış yazıları filtrelemek için parametreli bir scope oluşturalım:

class Post extends Model
{
    public function scopePublishedBefore($query, $date)
    {
        return $query->where('published_at', '<', $date);
    }
}
    

Yukarıdaki örnekte, $date parametresi, belirli bir tarihten önce yayınlanmış yazıları filtrelemek için kullanılır.

$postsBeforeDate = Post::publishedBefore('2023-01-01')->get();
    

Yukarıdaki örnekte, '2023-01-01' tarihinden önce yayınlanmış tüm yazıları çeker.