লারাভেল স্পষ্টত: সকলের ফলাফলের অর্ডার ()


214

আমি একটি সাধারণ কাজ আটকে আছি। আমাকে কেবল এই কলটি থেকে ফলাফলগুলি অর্ডার করতে হবে

$results = Project::all();

যেখানে Projectএকটি মডেল। আমি এই চেষ্টা করেছি

$results = Project::all()->orderBy("name");

তবে এটি কার্যকর হয়নি। কোনও টেবিল থেকে সমস্ত ডেটা পাওয়ার এবং তাদের অর্ডার দেওয়ার সর্বোত্তম উপায় কোনটি?

উত্তর:


384

আপনি আসলে ক্যোয়ারির মধ্যে এটি করতে পারেন।

$results = Project::orderBy('name')->get();

এটি যথাযথ ক্রম দিয়ে সমস্ত ফলাফল ফেরত দেবে।


এখানে দস্তাবেজগুলি রয়েছে: লারাভেল ডকসস
রায়ান

আর একটি ব্যাখ্যা get()বনাম all(): stackoverflow.com/questions/34587457/...
patricus

114

আপনি এখনও (বাছাই পর্যায়ে) অর্ডারবাইয়ের পরিবর্তে সাজ্টবাই (সংগ্রহের স্তরে) ব্যবহার করতে পারেন যদি আপনি এখনও সমস্ত () ব্যবহার করতে চান যেহেতু এটি কোনও সামগ্রীর সংগ্রহ ফেরত দেয়।

উর্দ্ধক্রমানুসারে

$results = Project::all()->sortBy("name");

অবতরণ আদেশ

$results = Project::all()->sortByDesc("name");

আরও বিশদ জন্য সংগ্রহ সম্পর্কে নথিপত্র দেখুন।

https://laravel.com/docs/5.1/collections


ঠিক আমি খুঁজছেন ছিল কি. orderByকোয়েরি স্তরের ব্যবহারের তুলনায় এর ব্যাপক ব্যবহারের কি কোনও ডাউনসাইড রয়েছে ?
গিডরিয়াস

1
fore @ ফায়ারওচ ($ পোষ্টস-> সাজ্টবাইডেস্ক ('তৈরি_্যাট')) পোস্ট হিসাবে) inc @ অন্তর্ভুক্ত ('পোষ্টস.পোস্ট') \ @endforeach
sdexp

2
পর্দার আড়ালে এটি কীভাবে কাজ করে তা জানতে আগ্রহী। এটি আমাকে আঘাত করে যেন সংগ্রহটি বাছাই করে sortBy()লারাভেল ইঞ্জিনের মধ্যে ঘটে (পিএইচপিতে), যখন orderBy()ডাটাবেসে সম্পন্ন হয়। অবশ্যই ডেটাবেস প্রায় সমস্ত অনুমেয় পরিস্থিতিতে ত্বরান্বিত হতে চলেছে, এবং আপনার ডেটাসেটটি বাড়ার সাথে সাথে পারফরম্যান্সে বৈষম্য বাড়বে। আমি এই সম্পর্কে অন্য মানুষের ধারণা শুনতে পছন্দ করি।
কার্টবোরহর্স

3
@cartbeforehorse আপনাকে জানতে হবে কোন পদ্ধতিটি কী দেয়। :: সমস্ত () সম্ভবত কেবলমাত্র কল করে -> হুডের নীচে পান () যা ফলস্বরূপ একটি সংগ্রহ ফেরৎ দেয়। সাজ্টবাই () সংগ্রহের একটি পদ্ধতি, সুতরাং হ্যাঁ এটি পিএইচপি সাইডে ঘটে (অর্ডারবাইয়ের বিপরীতে () যা কোয়েরি অবজেক্টে ডাকা হয়)। একেবারে :: (সমস্ত ()) ব্যবহার করা খারাপ ধারণা, এটি পিএইচপি-তে বাছাই করা যাক। কল্পনা করুন যে :: সমস্ত () মিলিয়ন অবজেক্টের সাথে একটি সংগ্রহ প্রদান করে। এটি আনতে খুব বেশি সময় লাগবে এবং পিএইচপি-তে এটি বাছাই করতে আরও বেশি সময় লাগবে। অবশ্যই, আপনি :: সমস্ত () ব্যবহার করতে পারেন যদি আপনি নিশ্চিতভাবে জানেন যে এটি কেবলমাত্র কয়েকটি মুখ্য বস্তু (একটি সংকলনে) ফিরিয়ে দেবে।
অব্রাম

কেন এই উত্তর গৃহীত উত্তর নয়? এটি সমস্ত () ফাংশন নিয়ে কাজ করেছিল।
বিশাল প্রকাশ

36

এছাড়াও, কেবলমাত্র পূর্ববর্তী উত্তরগুলিতে বোতাম লাগানোর জন্য, এটি দ্বিতীয় প্যারামিটার হিসাবে যুক্ত করে উতরাই descবা আরোহণের ascঅর্ডারগুলিতে বাছাই করা যেতে পারে ।

$results = Project::orderBy('created_at', 'desc')->get();

14

2017 আপডেট


লারাভেল 5.4 বিল্ডারকে জিজ্ঞাসা করার জন্য অর্ডারবাইডেস্ক () পদ্ধতি যুক্ত করেছে:

$results = Project::orderByDesc('name')->get();

10

আপনার যখন ডেস্ক হিসাবে তারিখের জন্য ফলাফলের প্রয়োজন হয়

$results = Project::latest('created_at')->get();

9

এটা কর:

$results = Project::orderBy('name')->get();

এটি করবেন না:

$results = Project::all()->sortBy('name');

কেন? সংক্ষেপে, প্রথম পদ্ধতির দ্বিতীয় পদ্ধতির চেয়ে দ্রুত।


3
ব্যাখ্যাটি যুক্ত করে চমৎকার লাগবে কেন: প্রথম পদ্ধতির ডেটাবেস (ক্যোয়ারী) স্তরে অর্ডার দেয় যা প্রায় সবসময় আরও বেশি দক্ষ - সেরা পারফরম্যান্স। আমি সর্বদা মডেল পদ্ধতির ব্যবহারটি বলতে চাই, যখন আপনার দ্বিতীয় পদ্ধতির প্রয়োজন হবে, আপনি জানতে পারবেন :)
jave.web


4

নোট, আপনি করতে পারেন:

$results = Project::select('name')->orderBy('name')->get();

এটি একটি কোয়েরি তৈরি করে:

"SELECT name FROM proyect ORDER BY 'name' ASC"

কিছু অ্যাপ্লিকেশনগুলিতে যখন ডিবি অপ্টিমাইজ করা হয় না এবং কোয়েরিটি আরও জটিল হয় এবং আপনার এসকিউএল সমাপ্তির মাধ্যমে অর্ডার তৈরি করা রোধ করা উচিত, আপনি এটি করতে পারেন:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

এখন পিএইচপি হলেন কে রেজাল্টের অর্ডার দেয়।


0

আপনার নির্দেশের জন্য কলটি প্রয়োজন, কারণ এটি কি রেকর্ডগুলি নিয়ে আসে এবং ক্যাটালগের মাধ্যমে অর্ডার দেয়

$results = Project::orderBy('name')
           ->get();

উদাহরণ:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

উদাহরণে ডেটা "যেখানে" দ্বারা ফিল্টার করা হয় এবং 20 টিরও বেশি রেকর্ডগুলি নিয়ে আসে এবং উচ্চতর থেকে নীচে অর্ডার দিয়ে ক্যাটালগ অর্ডার করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.