যেকোনো একটি course এ ভর্তি হয়ে সম্পূর্ণ ফ্রি তে Laravel 5.6 From Beginning to Advance কোর্সটি করার সুযোগ!

বাংলাদেশের ৩৬ তম Zend Certified Engineer, Masud Alam স্যার এর কাছে যেকোনো একটি কোর্সে ভর্তি হয়ে সম্পূর্ণ ফ্রীতে Laravel 5.6 শিখে নিন!

কিভাবে ?

ভাষার মাস পুরো February মাসে যারা Masud Alam স্যার এর দুটি course :

1. Professional Web Design and Development with PHP & MySQL for Beginners course
2. Zend Certified PHP Engineer (ZCPE) Advance Course

কোর্স দুটির যেকোনো একটিতে ভর্তি হবে স্যার তাদেরকে Laravel 5.6 From Beginning to advance (৬০ ঘন্টার) কোর্সটি সম্পূর্ণ ফ্রি তে করার সুযোগ দিবেন।

প্রত্যেকটি Course এর ফী নির্ধারণ করা হয়েছে: ৩০,০০০/=

অর্থাৎ যারা যেকোনো একটি কোর্স ৩০,০০০ টাকা দিয়ে করলেই ৬০ ঘন্টার Laravel 5.6 কোর্সটি সম্পূর্ণ ফ্রীতে করতে পারবেন।

উল্লেখ্য দীর্ঘ ৮ বছর Masud Alam স্যার Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করেন। বিশেষ ভাবে বাংলাদেশের ১০১ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই তার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে তিনি TechBeeo Software Company তে সিইও হিসাবে আছেন ।

সুতরাং যারা ওয়েবডেভলপ করতে চান অথবা ওয়েব ডেভেলপমেন্ট এ ক্যারিয়ার গড়তে চান তাদের জন্য সূবর্ণ সুযোগ। এই কোর্স গুলোতে স্যার স্টুডেন্ট দের মার্কেট place যেমন upwork, freelancer.com, fiverr, themeforest, codecanyon সম্পর্কে বিস্তারিত প্রশিক্ষণ দেয়া হবে, যারা যারা ইচ্ছুক তাদেরকে ২৮ই ফেব্রুয়ারী এর মধ্যে রেজিষ্ট্রেশন করার জন্য অনুরোধ করা যাচ্ছে। যে কোন আগ্রহী ব্যক্তিকে অতিসত্তর স্যার এর মোবাইল নম্বর: 01722 817591 এ যোগাযোগ করার অনুরোধ করা যাচ্ছে।

বাংলায় PHP LARAVEL FRAMEWORK পর্ব-১৫ : Retrieving with Eloquent ORM Model

Laravel ১৫ তম পর্বে আপনাকে স্বাগতম। এই পর্বটি বুঝতে হলে আপনাকে প্রথমে বুঝতে হবে Model কি? Eloquent এবং ORM কি?

Retrieving with Laravel Eloquent ORM Model

Retrieving with Laravel Eloquent ORM Model

Model কি?

MVC Framework এর মধ্যে “M” অক্ষরটি Model এর জন্য ব্যবহৃত হয়। Laravel Framework এ Model এর কাজ হচ্ছে Database সংশ্লিষ্ঠ কাজ গুলো করা। MVC ভিত্তিক যেকোনো software অথবা Web Application এর সমস্ত Database সংশ্লিষ্ঠ কাজ গুলো রাখা হয় Model নামক একটি class এ । এবং পরবর্তীতে এই Model Class টি extend করার মাধ্যমে আমরা আমাদের প্রয়োজনীয় নতুন নতুন Model Class তৈরী করতে পারি। যদিও Laravel Framework এ Database এর কাজ গুলো Route এবং Controller এ ও করা যায়। আলাদাভাবে Model ব্যাবহার করা হচ্ছে MVC Platform এর একটি আদর্শ পদ্ধতি। আর এতে সুবিধা হচ্ছে আপনার software অথবা Web Application এর সব Database Logic গুলো route এর মধ্যে একসাথে না রেখে আলাদা একটা পৃথক ফাইল অর্থাৎ একটি সিঙ্গেল Model Class এর মধ্যে রাখা। Laravel Framework এ Model ফাইল গুলা সরাসরি app ডিরেক্টরিতে থাকে ।

Object Relational Mapping (ORM) কি?

Object Relational Mapping (ORM) হচ্ছে এক ধরনের কৌশল বা Design Pattern, যা ব্যবহার করে object-oriented উপায়ে Database এর Object গুলোর মধ্যে Relation তৈরি করে। ORM এ Database এর প্রত্যেকটি table কে এক একটি আলাদা Object হিসেবে বিবেচনা করা হয়।

Eloquent ORM কি?

Eloquent হলো একটি ORM এর নাম, যা Laravel Framework এ Active Record প্রয়োগের জন্য তৈরী করা হয়েছে। আরো সহজ ভাবে বলা যায় Eloquent হচ্ছে Database এর query এর জন্য একটি নতুন এবং advance কৌশল যা আপনার Database এর complex query এর জন্য সহজ syntax প্রদান করে।

Laravel Framework এ Eloquent ORM Model কিভাবে কাজ করে?

Laravel Framework এ Eloquent ORM হলো একটি Model class যার থেকে আমরা বিভিন্ন child class তৈরী করার মাধ্যমে নতুন নতুন Model তৈরী করতে পারি। আর প্রতিটি Child Model class এর প্রতিটি Object এক একটি table এর object কে represent করে। মনে করি আমাদের একটি টেবিল আছে যার নাম students. তাহলে আপনাকে Laravel এর Eloquent ORM থেকে এটিকে extend করে একটি Student নামে child class তৈরী করতে হবে, এখন যদি আপনি আপনার নতুন Student child class এর একটি instance তৈরি করেন, তাহলে আপনাকে আর কোন Query লিখতে হবে না, অর্থাৎ, Laravel Framework এ আমরা Eloquent ORM ব্যবহার করে কোনও SQL statement না লিখেই Database table এ Create, Edit, Delete, Select এবং আরও অনেক কিছুই এমনকি Relational Database এর কাজ ও করতে পারব !

Eloquent ORM Model নিয়ে কাজ করার পূর্ব প্রস্তুতি :

Laravel Framework এ Eloquent ORM Model নিয়ে কাজ করতে হলে আপনাকে প্রথমে 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 করতে হবে।

এবার আপনি আমাদের Migration এর উপর লেখা article দেখানো নিয়মে students নামে নতুন একটি Table তৈরী করুন।

সব কিছু ঠিক থাকলে আপনার নতুন students table টি ঠিক নিচের মত হবে:

Students Table for Laravel ORM

Students Table for Laravel ORM

মডেল তৈরিঃ

Laravel Framework এ artisan command এর মাধ্যমে খুব সহজে আমরা নতুন নতুন Model তৈরী করতে পারি , ধরুন আমরা students table এর জন্য student নামে একটি Model তৈরী করব। চলুন artisan কমান্ড এর মাধ্যমে কাজটি সেরে ফেলিঃ

php artisan make:model Student

আপনি যদি মডেল তৈরি করার সময় Database Migragion তৈরি করতে চান, তাহলে আপনি –migration অথবা -m option টি ব্যবহার করতে পারেন:

php artisan make:model Student --migration
php artisan make:model Student --m

মডেল গুলো সাধারণ ভাবে app ডিরেক্টরির রুটেই থাকে, মডেলটি খুললে আমরা এরকম পাবোঃ

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //
}

Laravel Framework এ Eloquent ORM Model এর কিছু Conversion

Table Name:

Laravel Framework এ বাই ডিফল্ট table এর নাম বহুবচন (plural) এবং Model এর নাম একবচন (singular) হয়। সুতরাং আপনি যদি আপনার project একটি student entity তৈরী করতে চান , তাহলে আপনার table এর নাম হবে “students” এবং আপনার Model এর নাম হবে Student. এই কনভেনশনটিতে আপনার মডেলের table এর নাম দিতে হবে না কারণ Eloquent ইতিমধ্যেই আপনার জন্য table এর নাম assign করে রেখছে। কিন্তু যদি আপনার আলাদা আলাদা টেবিলের নাম থাকে (অথবা লরেভেল কনভেনশন অনুসরণ না করেন) তাহলে আপনাকে আপনার table এর নাম আপনার Model এ assign করে দিতে হবে।

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //
protected $table = "your_table_name"
}

Primary Keys

Laravel Framework এ Eloquent ORM বাই ডিফল্ট ধরে নেয় যে প্রতিটি টেবিলে id নামক একটি primary_key কলাম আছে। তবে আপনি চাইলে table এর primary_key একটি protected $primaryKey property দিয়ে পরিবর্তন করতে পারেন।

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //
protected $primaryKey= "student_id"
}

NON-INCREMENTAL এবং Non- NUMERIC primary_key

একইভাবে , Eloquent ORM ধরে নেয় যে primary_key এক এক করে বৃদ্ধি পাওয়া (incremental) একটি integer মান, যার অর্থ হল ডিফল্টভাবে primary_key স্বয়ংক্রিয়ভাবে এক এক করে বৃদ্ধি পাওয়া একটি int VALUE হবে। যদি আপনি একটি NON-INCREMENTAL বা একটি Non- NUMERIC primary_key ব্যবহার করতে চান তবে আপনাকে আপনার মডেলের $incrementing property কে false সেট করতে হবে। যদি আপনার primary_key টি integer না হয়, তবে আপনি চাইলে table এর primary_key type একটি protected $keyType property দিয়ে stirng এ পরিবর্তন করতে পারেন।

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //


protected $incrementing= false;
protected $keyType= 'string';
}

Timestamps

ডিফল্ট হিসাবে, Eloquent আপনার Database এর table এর মধ্যে created_at এবং updated_at কলাম দুইটি উপস্থিতির আশা করে। যদি আপনি এই কলামগুলি স্বয়ংক্রিয়ভাবে Eloquent দ্বারা পরিচালিত করতে না চান, তাহলে আপনার মডেলের $timestamps property টা false সেট করতে পারেন:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //

public $timestamps = false;
}

Date Format

আপনি যদি আপনার timestamps এর format কে customize করতে চান , তাহলে আপনাকে আপনার Model এ $dateFormat property তে সেটি set করে দিতে হবে। $dateFormat property নির্ধারণ করে date attributes গুলো কিভাবে database এ store হবে একইভাবে কিভাবে তাদের format গুলো যখন সেটি array অথবা json এ serialize হয়।

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //

 protected $dateFormat = 'U';
}

যদি আপনি timestamps সংরক্ষণ করতে ব্যবহৃত কলামের নাম customize করতে চান, তাহলে আপনি আপনার মডেলের CREATED_AT এবং UPDATED_AT constants সেট করার মাধ্যমে সেটি করতে পারেন:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //

    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_update';
}

Database Connection

ডিফল্টরূপে, সব Eloquent মডেল আপনার অ্যাপ্লিকেশনের জন্য default database configuration ব্যবহার করবে। আপনি মডেলের জন্য একটি পৃথক database configuration নির্দিষ্ট করতে চাইলে, $connection property ব্যবহার করতে পারেন :

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //

   protected $connection = 'connection-name';
}

Model ব্যবহার করে data retrieve:

একবার আপনি একটি Model এবং তার সংশ্লিষ্ট Database table তৈরি করেছেন, তখন আপনি আপনার Database থেকে Data Retrieve শুরু করতে প্রস্তুত। একটি শক্তিশালী query builder হিসাবে প্রতিটি eloquent মডেলের কথা ভাবুন যাতে আপনি মডেলের সঙ্গে যুক্ত Database এর table কে স্বচ্ছভাবে query করতে পারেন। Student Model ব্যবহার করে Database নিয়ে কাজ করার জন্য এখন আমরা একটা Student নামে Controller তৈরী করব। CLI তে আপনার project ডিরেক্টরিতে access করে নিচের artisan command টি run করুন:

php artisan make:model Student -mcr

এখন app/Http/Controllers folder এ StudentController টি তৈরী হয়ে গেছে, নিচের ছবিটি লক্ষ্য করুন :

Student Controller

Student Controller

একই ভাবে আপনার Student Model ও তৈরী হয়ে গেছে, নিচের ছবিটি লক্ষ্য করুন :

Student Model

Student Model

এবার StudentController এর index Method এ নিচের code টি লিখুন :

        $students=Student::all();

       foreach($students as $student){
        echo $student->name,"<br>";
       }

এবার আপনার route এ StudentController এর index method টি define করুন , ঠিক নিচের মত:

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

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

Laravel Eloquent ORM Result

Laravel Eloquent ORM Result

Eloquent ORM এ অতিরিক্ত Condition যোগ করা

Eloquent all Method মডেল সাধারণত টেবিলের সব result return করে । যেহেতু প্রতিটি eloquent মডেল একটি Query Builder হিসাবে কাজ করে, আর তাই আপনি বিভিন্ন অতিরিক্ত condition যোগ করতে পারেন, এবং তারপর result পেতে get Method ব্যবহার করতে পারেন :

এবার StudentController এর index Method এ নিচের code টি লিখুন :

 $students = Student::where('status', 1)
               ->orderBy('name', 'desc')
               ->take(3)
               ->get();
        foreach ($students as $student) {
            echo $student->name,"<br>";
        }

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

Additional constraints in Eloquent

Additional constraints in Eloquent

Chunking Results (খন্ডে খন্ডে ফলাফল প্রদর্শন)

অনেক বেশি row নিয়ে কাজ করতে গেলে অনেক সময় আমাদেরকে row গুলো ভাগে ভাগে প্রদর্শন করতে হয়। যেমন google আমাদেরকে তার search page এ একসাথে ১০ টির বেশি data প্রদর্শন করেনা, এইরকম একসাথে সব data না নিয়ে এসে খন্ডে খন্ডে দেখানোর জন্য আপনি Laravel Eloquent এর chunk Method ব্যবহার করতে পারেন।

এবার StudentController এর index Method এ নিচের code টি লিখুন :

 $students = Student::chunk(20, function ($students) {
            foreach ($students as $student) {
                //
            }
        });

Retrieving Single Models / Aggregates

Laravel Framework এ , একটি টেবিল থেকে সমস্ত row গুলোর পরিবর্তে আপনি find বা first ব্যবহার করে একক row retrieve করতে পারেন। আর এই কাজটি single model instance দিয়েই করা যেতে পারে। এবার StudentController এর index Method এ নিচের code টি লিখুন :

 echo Student::find(1)->name;
       echo "<br>";
       echo Student::where('status', 1)->first();
       echo "<br>";
      foreach(Student::find([1, 4]) as $student){
        echo $student->name,"<br>";
      }

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

Laravel Retrieving Single Models

Laravel Retrieving Single Models

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

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 সাইট টি আমার।
3 comments on “বাংলায় PHP LARAVEL FRAMEWORK পর্ব-১৫ : Retrieving with Eloquent ORM Model

Leave a Reply

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