2012-12-04 14 views
12

मैं जब ->get() Laravel में करने के लिए के रूप में उलझन में हूँ ...Laravel - जब उपयोग करने के लिए -> मिल()

E.G. DB::table('users')->find(1) की जरूरत नहीं है -> get() परिणाम प्राप्त है, न तो करता है करने के लिए User::find(1)

laravel डॉक्स कहते हैं कि "... पर अमल मिलता है या पहली विधि का उपयोग कर क्वेरी ..."

मैंने सुविज्ञ क्वेरी बिल्डर और सुवक्ता डॉक्स पढ़ा लेकिन समझ में नहीं आता जब get के उपयोग() की आवश्यकता है ...

मदद के लिए धन्यवाद enter image description here

उत्तर

14

के बाद से find() समारोह हमेशा के लिए प्राथमिक कुंजी का उपयोग करेगा तालिका, get() की आवश्यकता आवश्यक नहीं है। क्योंकि आप अपने चयन को कम नहीं कर सकते हैं और यही कारण है कि यह हमेशा उस रिकॉर्ड को प्राप्त करने और इसे वापस करने का प्रयास करेगा।

लेकिन जब आप Fluent क्वेरी बिल्डर आप इस तरह के रूप में घोंसला की स्थिति कर सकते हैं का उपयोग कर रहे:

$userQuery = DB::table('users'); 
$userQuery->where('email', '=', '[email protected]'); 
$userQuery->or_where('email', '=', '[email protected]'); 

यह आपको अपने कोड भर की स्थिति को जोड़ने के लिए जब तक आप वास्तव में उन्हें लाने के लिए चाहते हैं की अनुमति देता है, और फिर आप कहेंगे get() फ़ंक्शन।

// Done with building the query 
$users = $userQuery->get(); 
+0

धन्यवाद nerdklers, मैं वास्तव में उत्तर की सराहना करता हूं! तो 'get() '** केवल ** आवश्यक नहीं है जब आप' -> ढूंढें() 'का उपयोग करते हैं ... मुझे उपयोग होने पर किसी भी दस्तावेज़ को नहीं मिल रहा है ... यह भी है -> प्राप्त करें() Eloquent में उपयोग की आवश्यकता नहीं है या() का उपयोग वही और फ्लुएंट क्वेरी बिल्डर में समान है? मदद के लिए धन्यवाद! [] [1] [1]: http://i6.minus.com/jLj4oKVAVXP8l.png –

+1

इस बारे में सोचें: जब आप बिल्कुल नहीं जानते कि कोई प्रश्न वापस आ जाएगा तो आप 'get()' का उपयोग करने की आवश्यकता है। उदाहरण के लिए आप इसे 'सभी()' के साथ उपयोग नहीं कर सकते हैं क्योंकि आप ** ** जानते हैं कि यह सभी रिकॉर्ड्स वापस कर देगा और कोई और शर्तें लागू नहीं की जा सकती हैं। यह 'find()' के साथ समान है क्योंकि आप जानते हैं कि यह केवल एक रिकॉर्ड लाने का प्रयास करेगा। –

+0

@nerdklers - अच्छा स्पष्टीकरण। आप इसे मुख्य उत्तर में जोड़ने के बारे में सोच सकते हैं। –

0

find रिटर्न डेटाबेस से एक पंक्ति और एक धाराप्रवाह/वाक्पटु वस्तु के रूप में यह प्रतिनिधित्व करते हैं। जैसे SELECT * FROM users WHERE id = 3DB::table('users')->find(3);

get वस्तुओं के एक सरणी देता है। जैसे SELECT * FROM users WHERE created_at > '2014-10-12'DB::table('users')->where('created_at', '>', '2014-10-12')->get() के बराबर है जो उपयोगकर्ताओं को युक्त वस्तुओं की एक सरणी लौटाएगा जहां क्षेत्र में बनाया गया 4014-10-12 से नया है।

10
  • find(n) के लिए, आप प्राथमिक कुंजी जो 'एन' है के आधार पर एक पंक्ति को पुनः प्राप्त।
  • first() के लिए, आप पहली पंक्ति को उन सभी पंक्तियों के बीच पुनर्प्राप्त करते हैं, जहां खंड हैं।
  • get() के लिए, आप सभी पंक्तियों पुनर्प्राप्त करते हैं जो कि खंडों के अनुरूप हैं। (कृपया ध्यान दें कि सभी पंक्तियों तक पहुंचने के लिए लूप की आवश्यकता है या आपको कुछ त्रुटियां मिलेंगी)।
0

प्राप्त() विधि आपको उन डेटाबेस से सभी मान प्रदान करेगी जो आपके पैरामीटर को पूरा करती हैं जहां पहले() आपको केवल पहला परिणाम मिलता है। जब आप कुंजी खोज रहे हों तो आप ढूंढें() और findOrFail() का उपयोग करें। इस प्रकार मैं उनका उपयोग करता हूं:

जब मैं किसी तालिका से सभी डेटा चाहता हूं तो मैं सभी() विधि मॉडल :: सभी() का उपयोग करता हूं;

जब मैं प्राथमिक कुंजी द्वारा खोजना चाहता हूं: मॉडल :: ढूंढें (1) -> पहले(); या मॉडल :: findOrFail (1) -> पहले(); यह काम करेगा यदि एक की प्राथमिक कुंजी के साथ कोई पंक्ति है। इसे केवल एक पंक्ति को पुनर्प्राप्त करना चाहिए, इसलिए मैं() के बजाय पहले() का उपयोग करता हूं। याद रखें कि आपने कुंजी 1 का उपयोग करने वाली पंक्ति को हटा दिया है या आपके टेबल में डेटा नहीं है, तो आपका खोज (1) असफल हो जाएगा।

जब मैं विशिष्ट डेटा की तलाश कर रहा हूं, जहां क्लॉज: मॉडल :: कहां ('फ़ील्ड', '=', 'value') -> get();

जब मैं केवल खंड में डेटा का पहला मान चाहता हूं। मॉडल :: जहां ('फ़ील्ड', '=', 'मान') -> पहले();

संबंधित मुद्दे