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

Eager Loading Relations With Method التحميل المسبق للعلاقات بدالة With

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

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

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

يحل التحميل المسبق مشكلة استعلامات N+1 جذرياً عبر تحديد العلاقات المطلوب جلبها مسبقاً باستخدام دالة with قبل تنفيذ الاستعلام. بدلاً من إطلاق عشرات الاستعلامات داخل الحلقة، يجمع Eloquent كافة المفاتيح الأجنبية من الاستعلام الأول ويجلب جميع السجلات المرتبطة باستعلام ثانٍ واحد فقط يستخدم جملة WHERE IN.

  • ثبات عدد الاستعلامات (Constant 2 Queries): سواء عرضت 10 مقالات أو 1000 مقال مع مؤلفيها، ينفذ النظام استعلامين اثنين فقط.
  • تعدد العلاقات (Multiple Relations): تقبل دالة with اسم علاقة مفردة أو مصفوفة علاقات لتحميلها معاً بكفاءة.
  • انعدام استعلامات الحلقة (In-Memory Access): قراءة العلاقة داخل حلقة التكرار تتم فوراً من الذاكرة المحملة مسبقاً.
PHP
// Good: Runs only 2 queries total!
$posts = Post::with(['user', 'tags'])->get();

foreach ($posts as $post) {
    $author = $post->user->name;
}