Database Where Clauses
Laravel ১২ তম পর্বে আপনাকে স্বাগতম। এই পর্বটি বুঝতে হলে আপনাকে অবশ্যই আমাদের এর আগের পর্ব অর্থাৎ ১০ তম পর্বটি পড়ে আসতে হবে। বিশেষ ভাবে Query Builder নিয়ে কাজ করার পূর্ব প্রস্তুতি এই পার্ট টুকু দেখে নিতে হবে। এই পর্বে আমরা Laravel Query Builder দিয়ে Database এর যেকোনো table থেকে Data Select ব্যবহার করার সময় Where এবং Conditional clause এর ব্যবহার শিখবো।
Where Clause কি?
Database থেকে নির্দিষ্ট শর্ত সাপেক্ষে Data retrieve করার জন্য SQL WHERE clause ব্যবহার করা হয়। আরো সহজভাবে বলা যায় আপনি Database এর record গুলো ব্যবহার কারীর শর্ত অনুযায়ী ফিল্টার করার জন্য SQL WHERE clause ব্যবহার করতে পারেন। Laravel Framework এর query builder class এ WHERE clause এর কাজটি আরো অনেক সহজ করে দিয়েছে, যদিও আপনি Laravel Framework এ সরাসরি raw SQL এর সাথে where clause ব্যবহার করতে পারেন, তবে Query Builder এর where method ব্যবহার করলে করলে আপনার কাজ অনেক সহজ হয়ে যাবে।
Simple Where Clauses
একটা উদাহরণ দিয়ে ব্যাপারটা আরো ভালোভাবে বুঝা যাক, ধরুন আমরা আমাদের students table থেকে শুধু ৫ নম্বর id এর স্টুডেন্ট কে দেখাব, তাহলে আমাদেরকে Laravel এর where method কে getqueryController class এ নিচের মত লিখতে হবে।
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class getqueryController extends Controller
{
public function index(){
$students = DB::table('students')->where('id', '=', 5)->get();
foreach($students as $student){
echo "Id: ",$student->id,"<br>","Name: ",$student->name;
}
}
}
এখন আপনি যদি আপনার ব্রাউজার এ http://localhost:8000/getquery হিট করেন তাহলে নিচের মত ফলাফল দেখাবে
laravel where clause
তবে উপরের where clause এর মত আমরা = (equal sign) না দিলেই script কাজ করবে। তখন আমাদেরকে Laravel এর where method কে getqueryController class এ নিচের মত লিখতে হবে।
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class getqueryController extends Controller
{
public function index(){
$students = DB::table('students')->where('id',5)->get();
foreach($students as $student){
echo "Id: ",$student->id,"<br>","Name: ",$student->name;
}
}
}
এখন আপনি যদি আপনার ব্রাউজার এ http://localhost:8000/getquery হিট করেন তাহলে নিচের মত ফলাফল দেখাবে
laravel where clause
তবে Laravel where clause এ অন্যান্য where clause এর মত আপনি <= >= <> != like এইসব ব্যবহার করতে পারেন। নিচের উদাহরণগুলো দেখুন :
$students = DB::table('students')->where('id', '=', 5)->get();
$students = DB::table('students')->where('id', '!=', 5)->get();
$students = DB::table('students')->where('id', '<=', 5)->get();
$students = DB::table('students')->where('id', '>=', 5)->get();
$students = DB::table('students')->where('id', '<>', 5)->get();
$students = DB::table('students')->where('id', 'like', '%S')->get();
$students = DB::table('students')->where([
['status', '=', '1'],
['subscribed', '<>', '1'],
])->get();
Or Statements
Laravel Framework এ অনেকগুলো শর্তের মধ্যে আপনি যেকোনো একটি পাওয়ার জন্য orWhere ব্যবহার করতে পারেন। আপনার getqueryController class এ নিচের কোডটি লিখুন :
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class getqueryController extends Controller
{
public function index(){
$students = DB::table('students')
->where('id', '>', 3)
->orWhere('name', 'Sohag')
->get();
foreach($students as $student){
echo "Id: ",$student->id," ","Name: ",$student->name,"<br>";
}
}
}
এখন আপনি যদি আপনার ব্রাউজার এ http://localhost:8000/getquery হিট করেন তাহলে নিচের মত ফলাফল দেখাবে
Laravel orWhere Clause
সবগুলো where clauses method গুলো নিচে table আকারে দেওয়া হল :
Method নাম | Method এর ব্যবহার | উদাহরণ |
whereBetween | একটি নির্দিষ্ট column এর value টি দুটি value এর range এর মধ্যভর্তি যেকোন value কিনা, তা যাচাই করে। | 1 2 3 $students = DB::table(‘students’) ->whereBetween(‘id’, [1, 5]) ->get(); |
whereNotBetween | একটি নির্দিষ্ট column এর value টি দুটি value এর range এর মধ্যভর্তি যেকোন value নয়, তা যাচাই করে। | 1 2 3 $students = DB::table(‘students’) ->whereNotBetween(‘id’, [1, 5]) ->get(); |
whereIn | একটি নির্দিষ্ট column এর value গুলো আপনার দেওয়া যেইসব array এর value গুলোর সাথে মিলবে , শুধু সেগুলো নিয়ে কাজ করবে। | 1 2 3 $students = DB::table(‘students’) ->whereIn(‘id’, [1,2,3]) ->get(); |
whereNotIn | একটি নির্দিষ্ট column এর value গুলো আপনার দেওয়া যেইসব array এর value গুলোর সাথে মিলবে না , শুধু সেগুলো নিয়ে কাজ করবে। | $students = DB::table(‘students’) ->whereNotIn(‘id’, [1,2,3]) ->get(); |
whereNull | একটি নির্দিষ্ট column এর মান null কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereNull(‘updated_at’) ->get(); |
whereNotNull | একটি নির্দিষ্ট column এর মান null নয় তা চেক করে। | $students = DB::table(‘students’) ->whereNotNull(‘updated_at’) ->get(); |
whereDate | একটি নির্দিষ্ট column এর মান একটি নির্দিষ্ট date কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereDate(‘created_at’, ‘2017-12-31’) ->get(); |
whereMonth | একটি নির্দিষ্ট column এর মান একটি নির্দিষ্ট Month কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereMonth(‘created_at’, ’12’) ->get(); |
whereDay | একটি নির্দিষ্ট column এর মান একটি নির্দিষ্ট day কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereDay(‘created_at’, ’31’) ->get(); |
whereYear | একটি নির্দিষ্ট column এর মান একটি নির্দিষ্ট year কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereYear(‘created_at’, ‘2017’) ->get(); |
whereTime | একটি নির্দিষ্ট column এর মান একটি নির্দিষ্ট time কিনা তা চেক করে। | $students = DB::table(‘students’) ->whereTime(‘created_at’, ’12:30′) ->get(); |
whereColumn | দুটি column এর মান এর মধ্যে compare করার জন্য ব্যবহার করা হয় । | $students = DB::table(‘students’) ->whereColumn(‘first_name’, ‘last_name’) ->get(); |
$users = DB::table(‘users’) ->whereColumn( ‘updated_at’, ‘>’, ‘created_at’ )->get(); | ||
$students = DB::table(‘students’) ->whereColumn([ [‘first_name’, ‘=’, ‘last_name’], [‘updated_at’, ‘>’, ‘created_at’] ])->get(); |
Parameter Grouping
কখনো কখনো আপনাকে advance query লেখার জন্য অনেক গুলো where এর Parameter গুলোকে Grouping করতে হতে পারে, Laravel query builder এই কাজটা দারুন ভাবে হ্যান্ডেল করেছে , Parameter Grouping বুঝার জন্য নিচের query টি লক্ষ্য করুন :
DB::table('students')
->where('name', '=', 'Habib')
->orWhere(function ($query) {
$query->where('id', '>', 5)
->where('title', '<>', 'Mr');
})
->get();
উপরের query টি নিচের মত SQL তৈরী করবে :
select * from students where name = 'Habib' or (id > 5 and title <> 'Mr')
Where Exists Clauses
whereExists Method দিয়ে আপনি where exists clause তৈরী করতে পারেন। whereExists Method টি মূলত closure এর argument রিসিভ করার মাধ্যমে কাজ করে থাকে। আর closure এর argument টি query builder class এর instance receive করে , যা query define করার কাজে ব্যবহৃত হয়। Where Exists Clauses বুঝার জন্য নিচের query টি লক্ষ্য করুন :
DB::table('users')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
উপরের query টি নিচের মত একটি query generate করবে।
select * from users
where exists (
select 1 from orders where orders.user_id = users.id
)
JSON Where Clauses
Laravel Framework এ MySQL 5.7 এবং PostgreSQL Database এর json column type কলাম থেকে আপনি Data query করতে পারেন। আর এর জন্য আপনাকে “->” Operator টি ব্যবহার করতে হবে। JSON Where Clauses বুঝার জন্য নিচের query টি লক্ষ্য করুন :
$users = DB::table('users')
->where('options->language', 'en')
->get();
$users = DB::table('users')
->where('preferences->dining->meal', 'salad')
->get();
Conditional Clauses
একটি নির্দিষ্ট condition true হওয়ার ভিত্তিতে where clause রান করতে হয়, আর এর জন্য আপনাকে when condition clause ব্যবহার করতে হবে। when condtion clause ব্যবহার বুঝার জন্য নিচের উদাহরণটি দেখুন :
$role = $request->input('role');
$users = DB::table('users')
->when($role, function ($query) use ($role) {
return $query->where('role_id', $role);
})
->get();
ব্যাখ্যা :উপরের closure টি শুধু তখনই execute হবে , যখন first parameter এর condtion true হবে। আর first parameter false হলে closure execute হবেনা।