انتقل إلى محتوى الدرس

Constrained and Lazy Eager Loading تقييد التحميل المسبق ودالة Load

تشخيص مشكلة الأداء N+1 Query الناتجة عن التحميل الكسول وحلها جذرياً عبر التحميل المسبق بالدالة with ومنع التحميل الكسول.
1 صفوف تعليمية
إطار العمل Laravel
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

عندما تحتاج لتصفية أو ترتيب السجلات داخل العلاقة المحملة مسبقاً نفسها، مرر مصفوفة ترابطية إلى دالة with يكون مفتاحها اسم العلاقة وقيمتها دالة مغلقة تخصص الاستعلام. أما إذا كان كائن النموذج الأب محملاً مسبقاً في الذاكرة، فاستخدم دالتي load أو loadMissing لتحميل علاقاته لاحقاً بكفاءة.

  • تقييد التحميل المسبق (Constrained with): صفِّ أو رتب السجلات المرتبطة داخل دالة with المغلقة دون التأثير على نتائج النموذج الأب.
  • التحميل اللاحق (load Method): يحمل العلاقات مسبقاً لكائن نموذج أو مجموعة نماذج موجودة بالفعل في الذاكرة.
  • التحميل الذكي بدون تكرار (loadMissing): يجلب العلاقة فقط إذا لم تكن قد حُملت مسبقاً خلال دورة الطلب الحالية.
PHP
$posts = Post::with(['comments' => function ($q) {
    $q->where('is_approved', true)->latest();
}])->get();

$post->loadMissing('tags');