شرح صفوف ومحتوى الفقرة
يحل التحميل المسبق مشكلة استعلامات 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;
}