فرض کنید توی پروژهای دارید که باید اکثر جاها فقط رکوردهایی رو نشون بدید که فعال یا is_active = 1 باشن. اگه بخواید توی هر کوئری شرط where('is_active', 1)
رو تکرار کنید، هم کدتون شلوغ میشه و هم ممکنه به اشتباه این شرط رو توی بعضی کوئریها فراموش کنید.
اینجاست که Global Scopes به کمک میاد. با تعریف یه اسکوپ سراسری، میتونید شرطهایی رو که قراره همیشه توی مدلتون اعمال بشن، به راحتی به همهی کوئریهای مربوط به اون مدل اضافه کنید.
۱. اول یه کلاس جدید برای اسکوپ تعریف کنید. فرض کنیم اسکوپ شما برای فیلتر رکوردهای فعال هست:
۲. بعد، این اسکوپ رو توی مدلی که میخواید (مثلاً User) اضافه کنید:
حالا هر جا که User::all()
یا هر کوئری دیگه روی مدل User اجرا کنید، فقط رکوردهایی که is_active = 1
دارن برمیگردن.
این ترفند میتونه به شدت در پروژههای بزرگ و پیچیده به تمیز و ایمنتر شدن کد کمک کنه و خطاهای احتمالی رو کاهش بده.