Find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray () के बीच अंतर क्या है


107

इन विधियों में क्या अंतर है:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

मैं उनका उपयोग कर रहा हूं और हर एक अलग परिणाम देता है और कभी-कभी मुझे toArray()अंत में जोड़ना पड़ता है get()क्योंकि मेरा कार्य एक सरणी की उम्मीद कर रहा है। अन्य तरीकों के रूप में अच्छी तरह से सरणियों का उत्पादन नहीं होगा?



@ जोसेफ सिलबर की सभी जानकारी सही और बहुत उपयोगी है। मैं सूची में एक उत्तर जोड़ना चाहता हूं () Laravel 5.2 से संग्रह, क्वेरी बिल्डर और एलोकेंट क्वेरी बिल्डर ऑब्जेक्ट्स पर सूची विधि का नाम बदलकर प्लक कर दिया गया है। विधि हस्ताक्षर समान रहता है।
नीरव भोई

जवाबों:


224
  1. find($id)एक आईडी लेता है और एक एकल मॉडल लौटाता है। यदि कोई मिलान मॉडल मौजूद नहीं है, तो यह वापस आ जाता है null

  2. findOrFail($id)एक आईडी लेता है और एक एकल मॉडल लौटाता है। यदि कोई मिलान मॉडल मौजूद नहीं है, तो यह एक त्रुटि 1 फेंकता है ।

  3. first()डेटाबेस में पाया गया पहला रिकॉर्ड देता है। यदि कोई मिलान मॉडल मौजूद नहीं है, तो यह वापस आ जाता है null

  4. firstOrFail()डेटाबेस में पाया गया पहला रिकॉर्ड देता है। यदि कोई मिलान मॉडल मौजूद नहीं है, तो यह एक त्रुटि 1 फेंकता है ।

  5. get() क्वेरी से मेल खाते मॉडल का संग्रह लौटाता है।

  6. pluck($column)दिए गए कॉलम में सिर्फ मानों का संग्रह लौटाता है। लारवेल के पिछले संस्करणों में इस पद्धति को कहा जाता था lists

  7. toArray() मॉडल / संग्रह को एक साधारण PHP सरणी में परिवर्तित करता है।


नोट: एक संग्रह एक बीफ़ अप ऐरे है। यह एक सरणी के समान कार्य करता है, लेकिन इसमें बहुत अधिक कार्यक्षमता है, जैसा कि आप डॉक्स में देख सकते हैं ।

दुर्भाग्य से, PHP आपको एक संग्रह वस्तु का उपयोग करने नहीं देता है हर जगह आप एक सरणी का उपयोग कर सकते हैं। उदाहरण के लिए, foreachलूप में एक संग्रह का उपयोग करना ठीक है, इसे पास करना array_mapहै। इसी तरह, यदि आप एक तर्क के रूप में टाइप करते हैं, तो arrayPHP आपको इसे एक संग्रह पास नहीं करने देगा। PHP 7.1 में शुरू, iterableटाइपहिंट है , जिसका उपयोग सरणियों और संग्रह दोनों को स्वीकार करने के लिए किया जा सकता है।

यदि आप कभी भी संग्रह से एक सादा सरणी प्राप्त करना चाहते हैं, तो इसकी all()विधि को कॉल करें ।


1findOrFail और firstOrFailविधियों द्वारा फेंकी गई त्रुटि एक है ModelNotFoundException। यदि आप स्वयं इस अपवाद को नहीं पकड़ते हैं, तो लारवेल एक 404 के साथ जवाब देगा , जो कि आप ज्यादातर समय चाहते हैं।


1
स्पष्ट करने के लिए धन्यवाद। यहाँ बात है, मैं इस तरह की पोस्टों की एक सूची प्राप्त करने की कोशिश कर $post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);रहा हूं ताकि मैं एक्सेस कर सकूं $post->subreddit->moderators->user_idलेकिन वह दे Undefined property: Illuminate\Database\Eloquent\Collection::$user_idरहा है - मैं एक्सेस कर सकता हूं $post->subreddit->moderatorsलेकिन जब मैंने जोड़ा तो नहीं user_id- यह क्यों है?
२०:२५ बजे हैल्नेक्स Hal

subredditएक एकल मॉडल है, जिसमें एक moderatorsसंपत्ति है। moderatorsएक संग्रह है, एक मॉडल नहीं है। आप इसे सीधे बंद कर सकते हैं। आप चाहें तो पहले वाले को चेक कर सकते हैं:$post->subreddit->moderators[0]->user_id
जोसफ सिल्बर

मुझे लगता है कि आपको "यह एक त्रुटि फेंकता है" को "इसे एक ModelNotFoundException अपवाद फेंकता है" के साथ बदलना चाहिए: "वैसे भी बहुत बड़ा योगदान;)
bobbybouwmann

@ जोसेफिलबर परफेक्ट!
बॉबीबॉमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.