Database Ordering, grouping, limit
Laravel ১৩ তম পর্বে আপনাকে স্বাগতম। এই পর্বটি বুঝতে হলে আপনাকে অবশ্যই আমাদের এর আগের পর্ব অর্থাৎ ১০ তম পর্বটি পড়ে আসতে হবে। বিশেষ ভাবে Query Builder নিয়ে কাজ করার পূর্ব প্রস্তুতি এই পার্ট টুকু দেখে নিতে হবে। আজকের পর্বে আমরা Laravel Framework এ Data Ordering, Grouping, Limit, & Offset এই বিষয় গুলো দেখব।
Ordering
Laravel Framework দিয়ে Database এ Ordering টা তিন ভাবে করা যায়।
১. orderBy
২. latest / oldest
৩. inRandomOrder
এবার চলুন উপরের তিনটির ব্যবহার দেখা যাক:
orderBy: Database এর table এর একটি নির্দিষ্ট column এর ভিত্তিতে ascending অথবা descending অর্ডারে data সাজানোর জন্য orderBy Method ব্যবহৃত হয়। আর এর জন্য orderBy Method এর প্রথম Parameter এ table এর column এর নাম দিতে হয়, এবং দ্বিতীয় parameter এ asc অথবা desc লিখতে হবে। আপনার SQL টি ঠিক নিচের মতো হবে :
$students= DB::table('students')
->orderBy('name', 'desc')
->get();
latest / oldest: table এর প্রত্যেকটি row তৈরী হওয়ার date এর ভিত্তিতে latest অথবা oldest অর্ডারে সাজানো যায়। by default created_at কলাম এর ভিত্তিতে অর্ডারিং করে , তবে আপনি চাইলে short করার জন্য যেকোনো column name পাঠাতে পারেন। আপনার SQL টি ঠিক নিচের মতো হবে :
$students= DB::table('students')
->latest()
->first();
inRandomOrder:Database এর query result কে randomly দেখানোর জন্য ব্যবহৃত হয়। আপনার SQL টি ঠিক নিচের মতো হবে :
$randomStudent = DB::table('students')
->inRandomOrder()
->first();
groupBy / having
Database এর query result কে group wise দেখানোর জন্য groupBy / having ব্যবহৃত হয়। আর having method টি where এর মত কাজ করে। ধরুন আমাদের student table এর data গুলো student_id এর ভিত্তিতে group করব। এবং সেইসব id দেখাব , যেইগুলো 5 এর চেয়ে বড়। আপনার groupBy এবং having যুক্ত SQL টি ঠিক নিচের মতো হবে :
$students = DB::table('students')
->groupBy('student_id')
->having('student_id', '>', 5)
->get();
আপনি চাইলে groupBy Method এ একাধিক argument পাঠাতে পারেন ঠিক নিচের মতো:
$students= DB::table('students')
->groupBy('name', 'status')
->having('student_id', '>', 5)
->get();
skip / take
query থেকে প্রাপ্ত ফলাফলের সংখ্যা limit করতে বা query তে নির্দিষ্ট সংখ্যক ফলাফল বাদ দিতে, আপনি skip এবং take method ব্যবহার করতে পারেন। আপনার skip এবং take method যুক্ত SQL টি ঠিক নিচের মতো হবে :
$students = DB::table('students')->skip(10)->take(5)->get();
তবে আপনি skip method এর পরিবর্তে offset Method এবং take method এর পরিবর্তে limit method ব্যবহার করতে পারেন। আপনার offset এবং limit method যুক্ত SQL টি ঠিক নিচের মতো হবে :
$students = DB::table('students')
->offset(10)
->limit(5)
->get();