شرح صفوف ومحتوى الفقرة
يُعد القضاء على مشكلة استعلامات N+1 عبر التحميل المسبق أهم خطوة لتحسين أداء قواعد البيانات في التطوير اليومي بتطبيقات Laravel. يضمن الجمع بين استدعاء دالة with صراحة في المتحكمات وتفعيل preventLazyLoading أثناء التطوير ثبات عدد الاستعلامات مهما تضخم حجم البيانات.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحسن | معيار Laravel 12 الحديث |
|---|---|---|
| الدوران على العلاقات | قراءة اسم المؤلف مباشرة بعد Post::all مما يولد N+1 استعلاماً | التحميل المسبق عبر Post::with('user:id,name') باستعلامين فقط |
| العلاقات المتداخلة | إطلاق سلسلة استعلامات كسولة متتالية عبر ثلاثة جداول | استخدام الصيغة النقطية with('comments.author') لتحميلها معاً |
| نموذج أب محمل مسبقاً | كتابة استعلام منفصل لجلب الأبناء بمعرف الأب يدوياً | استدعاء دالة loadMissing على الكائن المحمل عند الحاجة |
| اكتشاف أخطاء الأداء | انتظار شكاوى البطء في خادم الإنتاج الحي بعد النشر | تفعيل Model::preventLazyLoading في بيئة التطوير المحلية |
PHP
$posts = Post::with(['user:id,name', 'tags'])
->withCount('comments')
->latest()
->get();
خلاصة المعرفة ومحطة الانتقال
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «التحميل المسبق وحل مشكلة استعلامات N Plus 1 في Eloquent» مفاهيم التحميل الكسول ومشكلة استعلامات N1، والتحميل المسبق للعلاقات بدالة With، والتحميل المتداخل وتحديد الأعمدة وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «ربط النماذج بالمسارات وترقيم الصفحات في Eloquent» للبناء التراكمي على ما تعلمته.