تكرار السؤال: …
الإجابة المختصرة
تعترض استعلامات Eloquent وتحفظ النتائج في الكاش تلقائياً وتبطلها عبر أحداث النماذج؛ وسلبيتها هي تعقيد تعقب العلاقات المتداخلة واستهلاك الذاكرة المفرط.
الشرح
توفر هذه الحزم كاش فوري بمجرد إضافة Trait إلى النموذج. تقوم باعتراض دالة get() وتوليد مفتاح بناءً على كود الـ SQL ومعاملاته. على الرغم من جاذبيتها في البداية، إلا أنها تعاني في المشاريع الكبيرة من صعوبة التنبؤ بما هو مخزن وما هو مبطل، وقد تسبب إبطالاً كلياً للكاش عند تحديث عمود غير ذي صلة، لذا يفضل معظم مهندسي البرمجيات التخزين المؤقت الصريح والمقصود (Explicit Caching).
مثال بالكود
// Explicit caching: easy to trace, easy to invalidate exactly where the data changes
public function featured(): Collection
{
return Cache::tags(['products'])->remember(
'products:featured',
600,
fn () => Product::featured()->with('category')->get(),
);
}
// app/Models/Product.php
protected static function booted(): void
{
static::saved(fn () => Cache::tags(['products'])->flush());
static::deleted(fn () => Cache::tags(['products'])->flush());
}أخطاء شائعة
- الاعتماد على حزم التخزين التلقائي كبديل عن كتابة استعلامات SQL مفهرسة ومحسنة في الأصل.