شروط WHERE المتعددة في Laravel Eloquent: من المبتدئ إلى المحترف

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية إنشاء استعلامات بشروط WHERE متعددة في Laravel Eloquent



هل سبق لك أن أمسكت بنفسك تفكر: "أحتاج إلى تصفية السجلات وفقًا لثلاثة شروط مختلفة، لكن بناء جملة Eloquent يبدو مربكًا بعض الشيء"؟ إذا كان الأمر كذلك، فأنت لست وحدك. سؤال "How to Create Multiple Where Clause Query Using Laravel Eloquent?" على Stack Overflow حصد آلاف المشاهدات، وهذا ليس مفاجئًا. العمل مع قاعدة البيانات هو قلب أي تطبيق PHP، والقدرة على بناء استعلامات معقدة هي ما يميز المبتدئ عن المحترف.



في هذه المقالة، سنستعرض جميع طرق إنشاء شروط WHERE المتعددة في Laravel Eloquent: من أبسط السلاسل إلى الهياكل المنطقية المتداخلة. ستتعلم كيفية دمج AND و OR، واستخدام whereHas للنماذج المرتبطة، وتجنب الأخطاء الشائعة. هيا بنا!



بناء الجملة الأساسي: سلسلة WHERE



الطريقة الأكثر وضوحًا لإضافة عدة شروط هي ببساطة استدعاء where() عدة مرات متتالية. افتراضيًا، يتم ربط جميع الشروط باستخدام AND.



// الحصول على جميع المستخدمين الذين status = 'active' و role = 'admin'$users = User::where('status', 'active')             ->where('role', 'admin')             ->get();

// SQL المكافئ:// SELECT * FROM users WHERE status = 'active' AND role = 'admin'


يمكنك تمرير مصفوفة من الشروط:



$users = User::where([    ['status', '=', 'active'],    ['role', '=', 'admin'],])->get();


كلا الخيارين صالحان، لكن الأول أسهل في القراءة، خاصة عندما تكثر الشروط.



شرط OR: عندما تحتاج إلى "أو"



ماذا لو أردنا العثور على مستخدمين إما نشطين أو مسؤولين؟ هنا يأتي دور orWhere().



// المستخدمون الذين status = 'active' أو role = 'admin'$users = User::where('status', 'active')             ->orWhere('role', 'admin')             ->get();

// SQL: SELECT * FROM users WHERE status = 'active' OR role = 'admin'


⚠️ تحذير مهم: إذا قمت بخلط where و orWhere، تذكر أولوية العوامل. يعالجها Laravel بالتسلسل، لذلك قد تختلف النتيجة عما هو متوقع.



مثال مع مأزق



// نريد: (status = 'active' AND role = 'admin') OR (plan = 'premium')$users = User::where('status', 'active')             ->where('role', 'admin')             ->orWhere('plan', 'premium')             ->get();

// SQL: WHERE status = 'active' AND role = 'admin' OR plan = 'premium'// هذا ليس نفس الشيء!


للحصول على النتيجة الصحيحة، استخدم التجميع مع الإغلاق:



$users = User::where(function ($query) {    $query->where('status', 'active')          ->where('role', 'admin');})->orWhere('plan', 'premium')  ->get();

// SQL: WHERE (status = 'active' AND role = 'admin') OR plan = 'premium'


شروط WHERE المتداخلة: تجميع الشروط



عندما يصبح المنطق أكثر تعقيدًا، تأتي الإغلاقات المتداخلة للإنقاذ. هذه هي أقوى أداة لإنشاء شروط معقدة.



// (age > 18 AND status = 'active') OR (age <= 18 AND parent_approved = 1)$users = User::where(function ($query) {    $query->where('age', '>', 18)          ->where('status', 'active');})->orWhere(function ($query) {    $query->where('age', '<=', 18)          ->where('parent_approved', 1);})->get();


الكود يُقرأ ككتاب: "ابحث عن المستخدمين البالغين والنشطين، أو القُصّر بموافقة الوالدين".



الشروط مع العوامل: WHERE IN, BETWEEN, NULL



يدعم Eloquent جميع عوامل SQL القياسية. إليك بعض العوامل المفيدة:



whereIn — التحقق من الانتماء إلى قائمة



<

المدونات

توصيات الكتب