Laravel Eloquent में एकाधिक WHERE: शुरुआत से विशेषज्ञ तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Laravel Eloquent में एकाधिक WHERE शर्तों के साथ क्वेरी कैसे बनाएं

\n\n

क्या आपने कभी सोचा है: "मुझे तीन अलग-अलग शर्तों के आधार पर रिकॉर्ड फ़िल्टर करने की ज़रूरत है, लेकिन Eloquent का सिंटैक्स कुछ उलझा हुआ है"? यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर "How to Create Multiple Where Clause Query Using Laravel Eloquent?" प्रश्न ने हज़ारों व्यूज़ प्राप्त किए हैं, और यह आश्चर्यजनक नहीं है। डेटाबेस के साथ काम करना किसी भी PHP एप्लिकेशन का दिल है, और जटिल क्वेरी बनाने की क्षमता एक शुरुआत करने वाले को एक पेशेवर से अलग करती है।

\n\n

इस लेख में, हम Laravel Eloquent में एकाधिक WHERE शर्तें बनाने के सभी तरीकों पर चर्चा करेंगे: सबसे सरल चेन से लेकर नेस्टेड लॉजिकल कंस्ट्रक्शन तक। आप सीखेंगे कि AND और OR को कैसे संयोजित करें, संबंधित मॉडल के लिए whereHas का उपयोग कैसे करें और सामान्य गलतियों से कैसे बचें। चलिए शुरू करते हैं!

\n\n

बेसिक सिंटैक्स: WHERE की चेन

\n\n

एकाधिक शर्तें जोड़ने का सबसे स्पष्ट तरीका है where() को लगातार कई बार कॉल करना। डिफ़ॉल्ट रूप से, सभी शर्तें AND के माध्यम से जुड़ती हैं।

\n\n
// उन सभी उपयोगकर्ताओं को प्राप्त करें जिनका status = 'active' है और role = 'admin' है\n$users = User::where('status', 'active')\n             ->where('role', 'admin')\n             ->get();\n\n// समतुल्य SQL:\n// SELECT * FROM users WHERE status = 'active' AND role = 'admin'
\n\n

आप शर्तों की एक सरणी भी पास कर सकते हैं:

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

दोनों विकल्प काम करते हैं, लेकिन पहला पढ़ने में आसान है, खासकर जब शर्तें अधिक हो जाती हैं।

\n\n

OR शर्त: जब "या" की आवश्यकता हो

\n\n

लेकिन अगर हमें ऐसे उपयोगकर्ता खोजने हैं जो या तो सक्रिय हैं या फिर एडमिन हैं? तब orWhere() काम में आता है।

\n\n
// उपयोगकर्ता जिनका status = 'active' है या role = 'admin' है\n$users = User::where('status', 'active')\n             ->orWhere('role', 'admin')\n             ->get();\n\n// SQL: SELECT * FROM users WHERE status = 'active' OR role = 'admin'
\n\n

⚠️ महत्वपूर्ण चेतावनी: यदि आप where और orWhere को मिलाते हैं, तो ऑपरेटरों की प्राथमिकता को याद रखें। Laravel उन्हें क्रमिक रूप से संसाधित करता है, इसलिए परिणाम अपेक्षित से भिन्न हो सकता है।

\n\n

एक मुश्किल उदाहरण

\n\n
// हम चाहते हैं: (status = 'active' AND role = 'admin') OR (plan = 'premium')\n$users = User::where('status', 'active')\n             ->where('role', 'admin')\n             ->orWhere('plan', 'premium')\n             ->get();\n\n// SQL: WHERE status = 'active' AND role = 'admin' OR plan = 'premium'\n// यह वही बात नहीं है!
\n\n

सही परिणाम प्राप्त करने के लिए, क्लोजर के साथ ग्रुपिंग का उपयोग करें:

\n\n
$users = User::where(function ($query) {\n    $query->where('status', 'active')\n          ->where('role', 'admin');\n})->orWhere('plan', 'premium')\n  ->get();\n\n// SQL: WHERE (status = 'active' AND role = 'admin') OR plan = 'premium'
\n\n

नेस्टेड WHERE: शर्तों का समूहीकरण

\n\n

जब लॉजिक जटिल हो जाता है, तो नेस्टेड क्लोजर मदद करते हैं। यह जटिल शर्तें बनाने का सबसे शक्तिशाली उपकरण है।

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

कोड एक किताब की तरह पढ़ा जाता है: "उन उपयोगकर्ताओं को खोजें जो वयस्क और सक्रिय हैं, या नाबालिग हैं और माता-पिता की स्वीकृति है"

\n\n

ऑपरेटरों के साथ शर्तें: WHERE IN, BETWEEN, NULL

\n\n

Eloquent सभी मानक SQL ऑपरेटरों का समर्थन करता है। यहाँ कुछ उपयोगी हैं:

\n\n

whereIn — सूची में शामिल होने की जाँच

\n<

ब्लॉग

पुस्तक अनुशंसाएँ