में किसी भी संदर्भ जब ->get()
का उपयोग कर आप बस के किसी भी उपयोग नहीं कर सकते नहीं मिल सकता है नीचे:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
क्योंकि अगर आप dd($result);
आप Illuminate\Support\Collection
का एक उदाहरण पर ध्यान देंगे हमेशा लौटा दिया जाता है, तब भी जब वहाँ कोई परिणाम नहीं हैं अनिवार्य रूप से आप जो जांच रहे हैं वह $a = new stdClass; if ($a) { ... }
है जो हमेशा सत्य लौटाएगा।
निर्धारित करने के लिए अगर कोई परिणाम आप भी कर सकते हैं कर रहे हैं निम्नलिखित:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
आप क्वेरी बिल्डर जो पहले पाया मॉडल का एक उदाहरण वापस आ जाएगी पर ->first()
बजाय ->get()
इस्तेमाल कर सकते हैं, या अन्यथा null
अन्यथा। यह उपयोगी है अगर आपको डेटाबेस से केवल एक परिणाम की आवश्यकता है या उम्मीद है।
$result = Model::where(...)->first();
if ($result) { ... }
नोट्स/संदर्भ
बोनस सूचना
संग्रह और क्वेरी बिल्डर मतभेद Laravel के नए चेहरे क्योंकि करने के लिए थोड़ा भ्रमित कर सकते हैं विधि के नाम अक्सर दोनों के बीच समान होते हैं। इसी कारण से यह जानना भ्रमित हो सकता है कि आप किस पर काम कर रहे हैं। क्वेरी बिल्डर अनिवार्य रूप से एक क्वेरी बनाता है जब तक आप एक विधि को कॉल नहीं करते हैं, जहां यह क्वेरी निष्पादित करेगा और डेटाबेस को हिट करेगा (उदाहरण के लिए जब आप ->all()
->first()
->lists()
और अन्य कुछ निश्चित विधियों को कॉल करते हैं)। उन विधियों Collection
ऑब्जेक्ट पर मौजूद हैं, जो कई परिणाम होने पर क्वेरी बिल्डर से वापस आ सकते हैं।यदि आप सुनिश्चित नहीं हैं कि आप वास्तव में किस वर्ग के साथ काम कर रहे हैं, तो var_dump(User::all())
करने का प्रयास करें और यह देखने के लिए प्रयोग करें कि वास्तव में कौन सी कक्षाएं लौट रही हैं (get_class(...)
की सहायता से)। मैं अत्यधिक अनुशंसा करता हूं कि आप संग्रह वर्ग के लिए स्रोत कोड देखें, यह बहुत आसान है। फिर क्वेरी बिल्डर को देखें और फ़ंक्शन नामों में समानताएं देखें और यह पता लगाएं कि यह वास्तव में डेटाबेस को हिट करता है।
स्रोत
2013-12-14 16:22:04
thx, बस यह जोड़ने के लिए कि यदि आप 'पहले() 'क्वेरी चलाते हैं, तो परिणाम' get() 'से अलग होता है, जिसे'! $ परिणाम' के साथ चेक किया जा सकता है क्योंकि खाली परिणाम 'शून्य' – bitinn
@btinn yes - - यदि आपने यानी 'मॉडल :: पहले() 'किया है - यह वास्तव में क्वेरी बिल्डर की' पहली 'विधि पर काम कर रहा है और संग्रह नहीं है, इसलिए यह डेटाबेस से पहला विकल्प लेगा - हालांकि' मॉडल :: प्राप्त करें() 'इल्यूमिनेट \ Support \ संग्रह का एक उदाहरण वापस कर देगा, इसलिए यदि आपने' $ r = मॉडल :: get() 'और फिर' $ r-> पहले() 'किया है तो यह उस संग्रह के भीतर पहला आइटम निकाल देगा । –
एक बात यह है कि यह जवाब पता नहीं है कि क्या 'गिनती ($ परिणाम) 'काम करता है; यह विस्तार जोड़ना एक सुधार होगा। –