عباس گودرزی
عباس گودرزی
خواندن ۱ دقیقه·۱۷ روز پیش

کاربرد Global Scope در لاراول

فرض کنید توی پروژه‌ای دارید که باید اکثر جاها فقط رکوردهایی رو نشون بدید که فعال یا is_active = 1 باشن. اگه بخواید توی هر کوئری شرط where('is_active', 1) رو تکرار کنید، هم کدتون شلوغ می‌شه و هم ممکنه به اشتباه این شرط رو توی بعضی کوئری‌ها فراموش کنید.

اینجاست که Global Scopes به کمک میاد. با تعریف یه اسکوپ سراسری، می‌تونید شرط‌هایی رو که قراره همیشه توی مدل‌تون اعمال بشن، به راحتی به همه‌ی کوئری‌های مربوط به اون مدل اضافه کنید.

پیاده‌سازی نمونه

۱. اول یه کلاس جدید برای اسکوپ تعریف کنید. فرض کنیم اسکوپ شما برای فیلتر رکوردهای فعال هست:

۲. بعد، این اسکوپ رو توی مدلی که می‌خواید (مثلاً User) اضافه کنید:

حالا هر جا که User::all() یا هر کوئری دیگه روی مدل User اجرا کنید، فقط رکوردهایی که is_active = 1 دارن برمی‌گردن.

چرا استفاده از Global Scopes مفیده؟

  • کد تمیزتر: نیاز نیست در هر کوئری شرط‌هاتون رو تکرار کنید.
  • تمرکز بر امنیت داده‌ها: اگر فراموش کنید شرط‌های مهم رو بزنید، Global Scopes به صورت خودکار این کار رو انجام می‌ده.
  • مقیاس‌پذیری: اگر بخواید شرط‌ها یا فیلترهای کلی رو تغییر بدید، فقط کافیه اسکوپ رو تغییر بدید و همه جا تغییرات اعمال می‌شه.

این ترفند می‌تونه به شدت در پروژه‌های بزرگ و پیچیده به تمیز و ایمن‌تر شدن کد کمک کنه و خطاهای احتمالی رو کاهش بده.

laraveleloquentglobal scopes
Software Engineer
شاید از این پست‌ها خوشتان بیاید