أسئلة مقابلات Eloquent ORM & Database Design في PHP & Laravel
10 سؤال عن Eloquent ORM & Database Design من مسار PHP & Laravel. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- مبتدئ
ما هي مشكلة N+1 في استعلامات Eloquent وكيف تقضي عليها باستخدام Eager Loading؟
تحدث عند قراءة علاقة السجلات داخل حلقة تكرارية مما يولد استعلاماً منفصلاً لكل صف؛ وتحل باستخدام with(['relation']) لجلب كل التبعيات في استعلامين فقط.
اقرأ الشرح الكامل - متقدم
كيف تعمل العلاقات متعددة الأشكال (Polymorphic Relationships) في Eloquent وما مخاطر تخزين أسماء الفئات؟
تسمح لنموذج واحد (مثل Comment) بالارتباط بعدة نماذج مختلفة عبر حقلي commentable_id و commentable_type؛ وتخزين أسماء الفئات بالكامل يسبب هشاشة يُفضل حلها بـ morphMap.
اقرأ الشرح الكامل - مبتدئ
ما الفرق بين Local Scopes و Global Scopes في نماذج Eloquent وكيف تطبق كلاً منهما؟
الـ Local Scope دالة مساعدة تُستدعى يدوياً لإعادة استخدام شروط الاستعلام، بينما الـ Global Scope شرط يُطبق تلقائياً على جميع استعلامات النموذج ما لم يُلغَ صراحة.
اقرأ الشرح الكامل - متوسط
كيف تطور نظام التحويل (Casts) في Laravel وما الفرق بين مصفوفة $casts ودالة casts() الجديدة؟
دالة casts() تتيح تعريف التحويلات بصيغة إستاتيكية صارمة الأنواع وتدعم استدعاء الـ Custom Casts مع تمرير معاملات دون الحاجة لمصفوفة نصية.
اقرأ الشرح الكامل - متقدم
قارن بين chunk و chunkById و lazy و cursor عند معالجة ملايين السجلات في Eloquent.
تعتمد chunk على OFFSET (وهو بطيء ويتخطى السجلات عند التعديل)، بينما chunkById تعتمد على معرف ID ثابت وهي آمنة وسريعة، وlazy/cursor تستخدم Generators لتقليل الذاكرة.
اقرأ الشرح الكامل - متوسط
كيف تنفذ عمليات الإدخال والتحديث الشاملة (Upsert) بكفاءة في Eloquent في استعلام واحد؟
باستخدام دالة upsert() التي تقبل مصفوفة البيانات، وقائمة الأعمدة التي تحدد التفرد، وقائمة الأعمدة المراد تحديثها عند وجود تعارض.
اقرأ الشرح الكامل - مبتدئ
ما هي أحداث النماذج (Eloquent Events) وما دور الـ Observers في تنظيم منطق الأعمال؟
تطلق أحداثاً مثل creating، created، updating، deleted خلال دورة حياة السجل؛ ويجمع الـ Observer مستمعي هذه الأحداث في فئة مخصصة.
اقرأ الشرح الكامل - متوسط
كيف تعمل ميزة الحذف اللين (Soft Deletes) في Laravel وما هو أثرها على فهارس قواعد البيانات؟
تضيف عمود deleted_at وتستبعد السجلات المحذوفة تلقائياً بـ Global Scope؛ ويجب تضمين deleted_at في الفهارس المركبة للحفاظ على سرعة الاستعلامات.
اقرأ الشرح الكامل - متقدم
كيف تدير معاملات قواعد البيانات بـ DB::transaction وكيف تتعامل مع أخطاء الأقفال الميتة (Deadlocks)؟
تنفذ العمليات ذرية وتلغيها عند الفشل؛ وتقبل دالة DB::transaction معاملاً يحدد عدد مرات إعادة المحاولة التلقائية عند حدوث Deadlock.
اقرأ الشرح الكامل - متقدم
متى تلجأ لاستخدام DB::raw وما هي الاحتياطات الأمنية الإلزامية لتجنب SQL Injection؟
تستخدم DB::raw لتنفيذ تعبيرات SQL معقدة لا يدعمها الـ Query Builder؛ ويجب عدم دمج مدخلات المستخدم بداخلها مطلقاً وتمريرها دائماً كمصفوفة bindings منفصلة.
اقرأ الشرح الكامل