شرح صفوف ومحتوى الفقرة
تعتمد علاقات Eloquent افتراضياً على التحميل الكسول، أي أن السجلات المرتبطة لا يتم جلبها من قاعدة البيانات إلا لحظة قراءة خاصية العلاقة فعلياً في الكود. عند الدوران على 50 مقالاً وقراءة اسم المؤلف داخل الحلقة، ينفذ الإطار استعلاماً واحداً للمقالات متبوعاً بـ 50 استعلاماً منفصلاً لكل مؤلف، مما يسبب اختناق الأداء المعروف بمشكلة N+1.
- الجلب عند الطلب (Lazy Loading): لا يتم تنفيذ استعلام العلاقة إلا عند قراءة الخاصية الديناميكية لأول مرة.
- مضاعف الاستعلامات (N+1 Queries): استعلام واحد للآباء يتبعه N استعلام داخل الحلقة لكل سجل فرعي على حدة.
- البطء الخفي في الإنتاج (Production Bottleneck): لا يظهر أثره مع 3 سجلات محلياً لكنه يبطئ الخادم بشدة عند نمو البيانات.
PHP
// Bad: Triggers 1 + N queries!
$posts = Post::all();
foreach ($posts as $post) {
$author = $post->user->name;
}