توقف عن تحميل علاقات (Relationships) كاملة فقط للحصول على "قيمة واحدة"
أنت تقتل ذاكرة السيرفر (RAM) دون أن تشعر!
في كثير من الأحيان نحتاج لعرض قائمة مستخدمين مع "تاريخ آخر طلب" لكل منهم.
- المبرمج المبتدئ: يستخدم
with('orders')ثمmax('created_at')في الـ Blade. (كارثة أداء إذا كان لكل مستخدم آلاف الطلبات). - المبرمج المتوسط: يستخدم
withCount()أو Load missing. - المهندس المحترف: يستخدم Subquery Select. باستخدام دالة
addSelect()مع Query صغير، يمكنك جلب قيمة واحدة من جدول آخر ودمجها كأنها "عمود" (Column) في جدول المستخدمين الأصلي.
النتيجة؟
- ✅ استعلام SQL واحد فقط.
- ✅ استهلاك RAM شبه منعدم (لأننا لم نحمل مئات الـ Models).
- ✅ سرعة Response فائقة حتى مع ملايين السجلات.
هل تستخدم الـ Subqueries داخل الـ ORM أم تفضل كتابة Raw SQL في الحالات المعقدة؟