मैं अपनी तालिका में सम्मिलित अंतिम फ़ाइल को पुनः प्राप्त करना चाहूंगा। मुझे पता है कि विधि first()
मौजूद है और आपको तालिका में पहली फ़ाइल प्रदान करती है, लेकिन मुझे नहीं पता कि अंतिम प्रविष्टि कैसे प्राप्त करें।
मैं अपनी तालिका में सम्मिलित अंतिम फ़ाइल को पुनः प्राप्त करना चाहूंगा। मुझे पता है कि विधि first()
मौजूद है और आपको तालिका में पहली फ़ाइल प्रदान करती है, लेकिन मुझे नहीं पता कि अंतिम प्रविष्टि कैसे प्राप्त करें।
जवाबों:
आपको उसी क्षेत्र द्वारा ऑर्डर करने की आवश्यकता होगी जिसे आप अब तक ऑर्डर कर रहे हैं, लेकिन अवरोही। एक उदाहरण के रूप में, यदि आपके पास अपलोड किए जाने के समय एक टाइम स्टैम्प है upload_time
, तो आप ऐसा कुछ करेंगे;
प्री-लारवेल 4 के लिए
return DB::table('files')->order_by('upload_time', 'desc')->first();
लारवेल 4 और उसके बाद के लिए
return DB::table('files')->orderBy('upload_time', 'desc')->first();
लारवेल 5.7 और उसके बाद के लिए
return DB::table('files')->latest('upload_time')->first();
यह फ़ाइल तालिका में पंक्तियों को समय, अवरोही क्रम , और पहले वाले को अपलोड करके आदेश देगा । यह नवीनतम अपलोड की गई फ़ाइल होगी।
orderBy
order_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
ऑर्डर दिनांक से अधिक समय तक काम करता है क्योंकि दिनांक स्ट्रिंग है और सबसे अधिक संभावना नहीं अनुक्रमित है। जबकि प्राथमिक कुंजी अनुक्रमित है और सुपर फास्ट काम करती है। भले ही create_at अनुक्रमित हो, यह प्राथमिक के मामले में अनुक्रमित स्ट्रिंग और INT नहीं है। इंडेक्स स्ट्रिंग का प्रदर्शन कम है।
orderBy('created_at', 'desc')
आपको अंतिम पंक्ति नहीं मिलती है । उदाहरण: 3 पंक्तियों में ठीक उसी प्रकार का TIMESTAMP मान हो सकता है और आपके साथ orderBy('created_at', 'desc')
3 में से पहला मिलेगा (जो जरूरी नहीं कि अंतिम पंक्ति हो)
लारवेल द्वारा प्रदान किए गए नवीनतम दायरे का उपयोग करें।
Model::latest()->first();
इस तरह आप सभी अभिलेखों को पुनः प्राप्त नहीं कर रहे हैं। ऑर्डर करने के लिए एक अच्छा शॉर्टकट।
created_at
कॉलम का उपयोग करती है ($timestamps = true)
, लेकिन इसे इच्छा पर अक्षम किया जा सकता है, इसलिए यदि आप अनिर्दिष्ट हैं तो एक त्रुटि होगी
आपने कभी उल्लेख नहीं किया है कि आप एलक्वेंट, लारवेल के डिफ़ॉल्ट ओआरएम का उपयोग कर रहे हैं या नहीं। यदि आप हैं, तो मान लें कि आप उपयोगकर्ता तालिका की नवीनतम प्रविष्टि बनाना चाहते हैं, create_at द्वारा, आप संभवतः इस प्रकार कर सकते हैं:
User::orderBy('created_at', 'desc')->first();
सबसे पहले, यह उपयोगकर्ताओं को क्रम से बनाया गया है, और फिर यह परिणाम का पहला रिकॉर्ड लेता है।
यह आपको एक संग्रह नहीं, उपयोगकर्ता ऑब्जेक्ट का एक उदाहरण लौटाएगा। बेशक, इस विकल्प का उपयोग करने के लिए, आपके पास एक उपयोगकर्ता मॉडल होना चाहिए, जो एलक्वेंट क्लास का विस्तार कर रहा है। यह थोड़ा भ्रामक लग सकता है, लेकिन इसे शुरू करना वास्तव में आसान है और ओआरएम वास्तव में मददगार हो सकता है।
अधिक जानकारी के लिए, आधिकारिक दस्तावेज देखें जो बहुत समृद्ध और विस्तृत है।
लारवेल संग्रह में अंतिम विधि है
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
यह इसे करने का सबसे अच्छा तरीका है।
all()
विधि वास्तव में सभी वस्तुओं को लोड करती है। यह लाखों रिकॉर्ड वाले टेबल पर काम नहीं करेगा।
last()
एक एकल उदाहरण को लौटाती है और संग्रह नहीं है, और pluck()
उस पर कॉल करना कॉल करने के बराबर है Model::all()->pluck('name')
, इसलिए तालिका name
की सभी पंक्तियों की विशेषता को वापस करना
इसे इस्तेमाल करे :
Model::latest()->get();
आप जिस क्षेत्र को फ़िल्टर करना चाहते हैं, उसके साथ लारवेल द्वारा प्रदान की गई नवीनतम गुंजाइश का उपयोग कर सकते हैं, मान लें कि यह आईडी द्वारा आदेश दिया जाएगा, फिर:
Model::latest('id')->first();
तो इस तरह से, आप created_at
लारवेल में डिफ़ॉल्ट रूप से फ़ील्ड के अनुसार ऑर्डर करने से बच सकते हैं ।
अंतिम रिकॉर्ड विवरण प्राप्त करने के लिए, नीचे दिए गए कोड का उपयोग करें:
Model::where('field', 'value')->get()->last()
एक और फैंसी तरीका है इसे Laravel 6.x (Unsure लेकिन 5.x aswell के लिए काम करना चाहिए) में:
DB::table('your_table')->get()->last();
आप खेतों तक भी पहुँच सकते हैं:
DB::table('your_table')->get()->last()->id;
get()
विधि सब कुछ प्राप्त करेगी your_table
और एक संग्रह उत्पन्न last()
करेगी और विधि उस संग्रह से अंतिम आइटम प्राप्त करेगी। तो आपके पास पहले से ही आपकी मेमोरी (खराब) पर लोड की गई तालिका का सारा डेटा होगा। आपको बस `DB :: तालिका ('आइटम') -> नवीनतम () -> पहला (); दृश्य के पीछे यह` ऑर्डरबाई ($ कॉलम, 'डीएससी') का उपयोग करना चाहिए और पहला रिकॉर्ड लाना चाहिए।
यदि आप वास्तविक पंक्ति की तलाश कर रहे हैं जिसे आपने लारावेल 3 और 4 के साथ डाला है जब आप एक नए मॉडल पर एक क्रिया save
या create
क्रिया करते हैं जैसे:
$user->save();
-या-
$user = User::create(array('email' => 'example@gmail.com'));
तब डाला गया मॉडल उदाहरण वापस कर दिया जाएगा और आगे की कार्रवाई के लिए इस्तेमाल किया जा सकता है जैसे कि उपयोगकर्ता के प्रोफाइल पेज पर पुनर्निर्देशित करना अभी बनाया गया है।
कम वॉल्यूम सिस्टम पर अंतिम सम्मिलित रिकॉर्ड कार्यों की खोज करना लगभग सभी समय काम करेगा लेकिन यदि आपको कभी भी आवेषण करना है तो उसी समय आप गलत रिकॉर्ड खोजने के लिए क्वेरी को समाप्त कर सकते हैं। यह वास्तव में एक लेनदेन प्रणाली में एक समस्या बन सकता है जहां कई तालिकाओं को अद्यतन करने की आवश्यकता होती है।
ध्यान दें कि last()
, latest()
नियतात्मक आप देख रहे हैं एक अनुक्रमिक या घटना / आदेश दिया रिकार्ड के लिए नहीं हैं। पिछले / हाल के रिकॉर्ड में सटीक समान created_at
टाइमस्टैम्प हो सकता है, और जो आपको वापस मिलता है वह नियतात्मक नहीं है। तो करते हैं orderBy(id|foo)->first()
। अन्य विचार / सुझाव कि किस प्रकार निर्धारक होना स्वागत योग्य है।