আমি আমার টেবিলের মধ্যে প্রবেশ করা শেষ ফাইলটি পুনরুদ্ধার করতে চাই। আমি জানি যে পদ্ধতিটি 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();
লারাভেল ৫.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();
তারিখ অনুসারে লারাভেল ৫.x অর্ডার আরও দীর্ঘক্ষণ কাজ করে কারণ তারিখটি স্ট্রিং এবং সম্ভবত সূচিযুক্ত নয়। প্রাথমিক কীটি সূচকযুক্ত এবং অতি দ্রুত কাজ করে। এমনকি যদি তৈরি_এটি সূচকযুক্ত হয় তবে এটি প্রাথমিক সূচীর ক্ষেত্রে আইএনটি নয় বরং সূচকযুক্ত স্ট্রিং। সূচকের স্ট্রিংয়ের পারফরম্যান্স কম।
orderBy('created_at', 'desc')
আপনাকে শেষ সারিটি দেয় না। উদাহরণ: 3 টি সারিতে একই টাইমস্ট্যাম্প মান থাকতে পারে এবং আপনার সাথে orderBy('created_at', 'desc')
3
বক্সের বাইরে লারাভেলের দেওয়া সর্বশেষ সুযোগটি ব্যবহার করুন।
Model::latest()->first();
এইভাবে আপনি সমস্ত রেকর্ড পুনরুদ্ধার করছেন না। অর্ডার করার জন্য একটি দুর্দান্ত শর্টকাট।
created_at
($timestamps = true)
আপনি কখনও স্পষ্টত, লারাভেলের ডিফল্ট ওআরএম ব্যবহার করছেন কিনা তা আপনি কখনও উল্লেখ করেননি। আপনি যদি হন তবে ধরা যাক আপনি ব্যবহারকারীর টেবিলের সর্বশেষ এন্ট্রি পেতে চান, তৈরি_এটি দ্বারা, আপনি সম্ভবত নিম্নলিখিত হিসাবে এটি করতে পারেন:
User::orderBy('created_at', 'desc')->first();
প্রথমে এটি ব্যবহারকারীদের ক্রম_আট ফিল্ডের মাধ্যমে নামিয়ে, অর্ডার করে এবং তারপরে এটি ফলাফলের প্রথম রেকর্ড নেয়।
এটি আপনাকে ব্যবহারকারীর অবজেক্টের উদাহরণ দেয়, কোনও সংগ্রহ নয়। অবশ্যই, এই বিকল্পটি ব্যবহার করতে, আপনার কাছে ব্যবহারকারীর মডেল থাকতে হবে, প্রচ্ছন্ন শ্রেণিটি প্রসারিত হবে। এটি কিছুটা বিভ্রান্তিকর লাগতে পারে তবে এটি শুরু করা সত্যিই সহজ এবং ওআরএম সত্যিই সহায়ক হতে পারে।
আরও তথ্যের জন্য, অফিসিয়াল ডকুমেন্টেশন যা খুব সমৃদ্ধ এবং বিস্তারিতভাবে দেখুন তা পরীক্ষা করে দেখুন।
সর্বশেষ রেকর্ড বিশদ পেতে
Model::all()->last();
অথবাModel::orderBy('id', 'desc')->first();
সর্বশেষ রেকর্ড আইডি পেতে
Model::all()->last()->id;
অথবা Model::orderBy('id', 'desc')->first()->id;
লারাভেল সংগ্রহের পদ্ধতিটি শেষ
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()
লারাভেল x.x এ এটি করার আরেকটি অভিনব উপায় (অনিশ্চিত তবে অবশ্যই 5.x এর জন্যও কাজ করা উচিত):
DB::table('your_table')->get()->last();
আপনি ক্ষেত্রগুলি অ্যাক্সেস করতে পারেন:
DB::table('your_table')->get()->last()->id;
get()
পদ্ধতিটি সমস্ত সংগ্রহ থেকে your_table
সংগ্রহ last()
করবে এবং সংগ্রহ তৈরি করবে এবং পদ্ধতিটি সংগ্রহ থেকে শেষ আইটেমটি পাবে। সুতরাং আপনার টেবিলে থাকা সমস্ত ডেটা ইতিমধ্যে আপনার স্মৃতিতে লোড হবে (খারাপ)। আপনার কেবলমাত্র `ডিবি :: টেবিল ('আইটেম') -> সর্বশেষ () -> প্রথম (); the দৃশ্যের পিছনে এটি অর্ডার বাই ($ কলাম, 'ডেস্ক') perform ব্যবহার করুন এবং প্রথম রেকর্ডটি আনুন।
আপনি যদি নতুন মডেলটিতে কোনও save
বা create
ক্রিয়া সঞ্চালনের সময় লারাভেল 3 এবং 4 দিয়ে সবেমাত্র সন্নিবেশিত প্রকৃত সারিটি সন্ধান করছেন :
$user->save();
-অথবা-
$user = User::create(array('email' => 'example@gmail.com'));
তারপরে modelোকানো মডেল উদাহরণটি ফিরে আসবে এবং সুনির্দিষ্টভাবে তৈরি করা ব্যবহারকারীর প্রোফাইল পৃষ্ঠায় পুনঃনির্দেশকরণের মতো আরও ক্রিয়া হিসাবে ব্যবহার করা যেতে পারে।
সর্বনিম্ন ভলিউম সিস্টেমে সন্নিবেশিত রেকর্ডের কাজগুলি প্রায় সময়ই কাজ করবে তবে আপনাকে যদি একই সময়ে সন্নিবেশ করতে হয় তবে আপনি ভুল রেকর্ডটি সন্ধানের জন্য অনুসন্ধান করতে পারেন। এটি ট্রানজেকশনাল সিস্টেমে সত্যই সমস্যা হয়ে উঠতে পারে যেখানে একাধিক সারণী আপডেট হওয়ার প্রয়োজন।
সচেতন থাকুন যে last()
, latest()
আপনি যদি ক্রমিক বা ইভেন্ট / অর্ডার করা রেকর্ডের সন্ধান করছেন তবে নির্দোষ নয়। সর্বশেষ / সাম্প্রতিক রেকর্ডগুলিতে হুবহু একই created_at
টাইমস্ট্যাম্প থাকতে পারে এবং আপনি যা ফিরে পাবেন তা নির্বিচারক নয়। তাই করো orderBy(id|foo)->first()
। কীভাবে প্রতিরোধমূলক হতে হবে সে সম্পর্কে অন্যান্য ধারণা / পরামর্শ স্বাগত।