PHP Professional এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

বাংলায় PHP LARAVEL FRAMEWORK পর্ব-১০: Retrieving Results with Query Builder

Laravel Framework এ Database Query Builder কি?

Laravel Database query builder

Laravel Database query builder

Query Builder হচ্ছে Laravel এর একটি Facades Class যা আপনাকে Database query গুলো তৈরী এবং চালনা করার জন্য একটি সহজ এবং স্বচ্ছ ইন্টারফেস এর সুবিধা দেয়। এটি আপনার অ্যাপ্লিকেশনে Database সংশ্লিট সব ধরণের কাজের জন্য ব্যবহার করা যেতে পারে এবং Laravel এ support করে এমন সব Database System (যেমন: MySQL, PostgreSQL,SQLite,SQL Server) এর সাথে কাজ করে। query builder যেহেতু PDO parameter binding ব্যবহার করে তাই এটি ব্যবহারের ফলে আপনার application এ SQL injection attack হওয়া থেকে বিরত রাখে। এবং Binding Parameter হিসাবে পাস করা স্ট্রিং clean করার কোন প্রয়োজন হয়না।

facade কি?

Note: facade হচ্ছে class গুলোকে একটি static interface প্রধান করে বা Laravel Framework এ facade গুলো Service Container এর মধ্যে static froxy হিসেবে কাজ করে। অর্থাৎ class এর Method গুলোকে Traditional static Method গুলোর তুলনায় আরো মসৃণ, সংক্ষিপ্ত static code করার সুযোগ দেয় ।

Query Builder নিয়ে কাজ করার পূর্ব প্রস্তুতি :

Laravel Framework এ Database Query Builder নিয়ে কাজ করতে হলে আপনাকে প্রথমে Database এর host এর সাথে connect এবং Database Select করতে হবে। আর এর জন্য আপনাকে আপনার project এর root ফোল্ডারের .env ফাইল এ Database এর host, username, password এবং Database name বলে দিতে হবে। নিচের ছবিটি লক্ষ্য করুন :

Laravel Database Connection in .env file-

Laravel Database Connection in .env file-

Note: .env file edit করার পর অবশ্যই php artisan সার্ভার টি রিস্টার্ট দিতে হবে। অথবা “php artisan config:clear” এই command টি run করতে হবে।

এবার Laravel Framework এ Query Builder এর Query গুলো বুঝার জন্য আমরা আলাদা ভাবে একটা Route define করব এবং একটা Controller তৈরী করব, চলুন প্রথমে আমরা /getquery url এবং getqueryController point করার জন্য routes/web.php তে আমাদের route defina করি :

Route::get('/getquery', '[email protected]');

এবার আমরা CLI তে আমাদের getqueryController টি তৈরী করব:

php artisan make:controller getqueryController

সব কিছু ঠিক থাকলে আপনার CLI নিচের মত ফলাফল দেখাবে :

create query controller

create query controller

এখন আপনার app/Http/Controllers ফোল্ডারে getqueryController.php file এ নিচের মত কোড গুলো দেখতে পাবেন।

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class getqueryController extends Controller
{
    //
}

এখন আমরা আমাদের getqueryController class এ একটা index Method তৈরী করব। আমাদের getqueryController টি দেখতে নিচের মত হবে:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
   public function index(){
		echo "Welcome to Query Builder class";
	}
}

এখন আমরা http://localhost:8000/getquery রান করার মাধ্যমে চেক করব সব ঠিক আছে কিনা।

getquery

getquery

Laravel Framework এ Query Builder নিয়ে কাজ করার জন্য আমাদের সব ধরণের প্রস্তুতি শেষ, এখন আমরা ধাপে ধাপে সব ধরণের Databasse Query Method গুলো দেখবো।

Laravel Query Builder দিয়ে Database Table এর Result গুলো retrieve করা :

আমাদের দৈনন্দিন কাজে Database নিয়ে কাজ করতে গেলে , আমাদেরকে একটি Database এর ভিন্ন ভিন্ন Table থেকে অনেক ভাবে Data Retrieve করতে হয়। Laravel Framework এ DB Facade এর table Method দিয়ে আমরা এই কাজ গুলো খুব সহজে করতে পারি। চলুন একে একে সবধরণের Retrieve পদ্ধতি দেখা যাক:

Database এর একটি নির্দিষ্ট table থেকে সব row একসাথে retrieve করা :

Database এর table থেকে সব গুলো row retrieve করার জন্য আপনি DB facade এর table Method টি ব্যবহার করতে পারেন। table Method টি আপনার দেওয়া Database table থেকে instance হিসেবে একটি fluent query builder রিটার্ন করবে। যেটি আপনাকে আরো অনেকগুলো specific chain method এর ব্যবহারের সুযোগ দিবে, এবং সর্বশেষে get() Method দিয়ে আপনার ফলাফল পেতে সাহায্য করবে। চলুন একটা উদাহরণ দিয়ে আরো ভালো ভাবে বুজে নেয়া যাক :

প্রথমে আমাদের app/http/Controllers/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')->get();
		 return view('students', ['students' => $students]);
	}
}

ব্যাখ্যা: এখানে প্রথমে আমরা ৩ নম্বর লাইনে Laravel এর DB Facade টি ব্যবহার করি , তারপর ৮ নম্বর লাইনে DB Facade এর table Method এর মধ্যে আমরা যেই table থেকে data retrieve করব তার নাম দেয়, (আমরা এখানে students table ব্যবহার করি ) . সর্বশেষ আমরা get() Method দিয়ে সব data retrieve করে $students variable এ রাখি। ৯ নম্বর লাইনে students.php view file এ আমরা Data গুলো পাঠাই।

দ্বিতীয়ত: আমাদের resources/views/students.php view file এর কাজ

<!DOCTYPE html>
<html>
<head>
	<title>Students View</title>
</head>
<body>
<?php
foreach ($students as $student) {
    echo $student->name,"<br>";
}
?>
</body>
</html>

এখন আপনি যদি আপনার ব্রাউজার এ http://localhost:8000/getquery হিট করেন তাহলে নিচের মত ফলাফল দেখাবে :

query builder get

query builder get

Database এর একটি নির্দিষ্ট table থেকে একটি single row অথবা single column retrieve করা

আপনি Database এর table থেকে একটি single row অথবা single column retrieve করার প্রয়োজন হলে, আপনি first Method ব্যবহার করতে পারেন। আপনার getqueryController class এ নিচের কোডটি লিখুন :

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
	public function index(){
		$user = DB::table('students')->where('name', 'Masud Alam')->first();
		echo $user->name;
	}
}

আপনি সম্পূর্ণ row এর পরিবর্তে সরাসরি একটি column এর value print করতে চাইলে value() method টি ব্যবহার করতে পারেন। এর জন্যে আপনার getqueryController class এ নিচের কোডটি লিখুন :

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
	public function index(){
		$email = DB::table('students')->where('name', 'Masud Alam')->value('email');
		echo $email;
	}
}

Table এর একটি নির্দিষ্ট column এর সব row একসাথে retrieve করা :

Table এর একটি নির্দিষ্ট column এর সব row একসাথে retrieve করতে চাইলে আপনি DB facade এর pluck() Method ব্যবহার করতে পারেন। নিচের উদাহরণটি দেখুন :

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
	public function index(){
		$names = DB::table('students')->pluck('name');
		foreach ($names as $name) {
			echo $name,"<br>";
		}
	}
}

Result

Laravel DB pluck method

Laravel DB pluck method

তবে আপনি চাইলে table এর একটি column কে key এবং অন্যটিকে value হিসেবে রিটার্ন করতে পারেন । নিচের উদাহরণটি দেখুন :

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
	public function index(){
		$names = DB::table('students')->pluck('name','id');
		foreach ($names as $id=>$name) {
			echo "ID: ", $id;
			echo " Name: ", $name,"<br>";
		}
	}
}

Result

Laravel pluck method with two parameter

Laravel pluck method with two parameter

Chunking Results

Database এ হাজার হাজার record নিয়ে কাজ করতে গেলে আপনাকে অনেক সময় সব ডাটা একসাথে retrive করতে বিভিন্ন সমস্যায় পড়তে হয়, এর জন্য আপনি DB facade এর chunk method ব্যবহার করতে পারেন। নিচের উদাহরণটি দেখুন :

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class getqueryController extends Controller
{
	public function index(){
		DB::table('students')->orderBy('id')->chunk(2, function ($students) {
			echo "<pre>";
			print_r($students);
			echo "</pre>";
		});
	}
}

Result

Laravel Framework chunk

Laravel Framework chunk

Aggregates

Laravel Query Builder count, max, min, avg, এবং sum নামে কিছু aggregate Method এর সুবিধা দেয়, নিচে এগুলোর কিছু উদাহরণ দেওয়া হলো :

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')
                ->where('finalized', 1)
                ->avg('price');

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply

Your email address will not be published. Required fields are marked *