Eloquent Scopes من أقوى الأدوات اللي Laravel بيقدمها لتنظيم الاستعلامات وكتابة كود قابل للصيانة على المدى الطويل.
بدل ما تكرر نفس شروط الاستعلام في أكتر من مكان، Scopes بتخليك تحط المنطق مرة واحدة داخل الـ Model وتستخدمه في أي مكان بسهولة.
ما هي Eloquent Scopes؟ #
Eloquent Scopes هي طرق (Methods) داخل الـ Model بتضيف شروط جاهزة على الاستعلامات.
Laravel بيدعم نوعين:
- Local Scopes
- Global Scopes
Local Scopes #
Local Scopes بتستخدم لما يكون عندك شروط استعلام بتتكرر كتير.
مثال #
class Post extends Model
{
public function scopePublished($query)
{
return $query->where('published', true);
}
public function scopeLatestPublished($query)
{
return $query->published()
->orderByDesc('published_at');
}
}
الاستخدام
Post::published()->get();
Post::latestPublished()->paginate(10);
الكود بقى:
أوضح
أقصر
أسهل في القراءة
ليه Scopes مهمة؟
بدون Scopes:
الاستعلامات بتتكرر
الكنترولرز بتبقى مليانة منطق
التعديل بيبقى مرهق
Scopes بتحط منطق الاستعلام في مكانه الطبيعي: الـ Model.
Global Scopes
Global Scopes بتتطبق تلقائيًا على كل الاستعلامات الخاصة بالـ Model.
استخداماتها الشائعة
Multi-Tenancy
إظهار البيانات النشطة فقط
تطبيق قيود أمنية افتراضية
class ActiveScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where('is_active', true);
}
}
أفضل الممارسات
خلي أسماء Scopes واضحة ومعبرة
بلاش تحط منطق معقد جوه Scope
استخدم Scopes بدل تكرار where
دمج Scopes بيدي مرونة عالية
الخلاصة
Eloquent Scopes مش مجرد اختصار للكود
دي أداة أساسية لبناء تطبيق Laravel نظيف وقابل للتوسع.
ميزة صغيرة… تأثيرها كبير 🔥