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.