লারাভেল ইলোকুয়েন্ট:

এই টপিকে আমরা বাগ্মী মডেল সম্পর্কে শিখব যা একটি ডাটাবেসের সাথে মিথস্ক্রিয়াকে অনুমতি দেয়। প্রতিটি ডাটাবেস টেবিলের তার সংশ্লিষ্ট মডেল রয়েছে যা একটি ডাটাবেসের সাথে মিথস্ক্রিয়া প্রদান করে। মডেলটি আপনাকে আপনার টেবিলের ডেটা অনুসন্ধান করতে দেয়।

মডেলগুলি অ্যাপ ডিরেক্টরিতে তৈরি করা হয় । আপনি মডেলটিকে যেকোনো জায়গায় রাখতে পারেন যা composer.json ফাইল অনুযায়ী স্বয়ংক্রিয়ভাবে লোড হতে পারে।

আমরা মডেল তৈরি করতে নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন।

php artisan make:model Post

আমরা ডাটাবেস মাইগ্রেশন ব্যবহার করে মডেল তৈরি করতে পারি।

php artisan make:model Post -m

বা

php artisan make:model Post -migration

মডেল তৈরির পদক্ষেপ:

যখন আমরা একটি গিট ব্যাশ উইন্ডোতে উপরের কমান্ডটি প্রবেশ করি।

উপরের উইন্ডোটি দেখায় যে 'Post' নামের মডেলটি সফলভাবে তৈরি করা হয়েছে।

মডেল (Post) অ্যাপ ডিরেক্টরিতে তৈরি করা হয়।

মডেলের গঠন:

আমরা উপরে তৈরি মডেল ক্লাসের কাঠামো নীচে দেখানো হয়েছে।

  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class Post extends Model  
  8. {  
  9.     //  
  10. }  

উপরের কোডটি দেখায় যে ক্লাস পোস্টটি Illuminate\Database\Eloquent\Model কে প্রসারিত করে ।

Table names বা টেবিলের নাম:

Laravel eloquent- পোস্ট মডেলের জন্য ব্যবহার করার জন্য আমাদের টেবিলের নাম নির্দিষ্ট করার দরকার নেই। ক্লাসের বহুবচন নামটি টেবিলের নাম হিসাবে বিবেচিত হবে যদি না আমরা টেবিলের নাম স্পষ্টভাবে উল্লেখ করি। উদাহরণস্বরূপ উপরের কোডে ক্লাসের নাম পোস্ট যা টেবিলের পোস্টগুলিতে কাজ করে। নিচের কোডে দেখানো মডেল ক্লাসের $table অ্যাট্রিবিউট ব্যবহার করে আপনি কাস্টম টেবিলটিও নির্দিষ্ট করতে পারেন।

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4.   
  5. class Post extends Model  
  6. {  
  7.     /** 
  8.      * The table associated with the model. 
  9.      * 
  10.      * @var string 
  11.      */  
  12.     protected $table = ?posts';  
  13. }  

উপরের কোডে $table অ্যাট্রিবিউট উল্লেখ করে যে পোস্ট ক্লাস পোস্ট টেবিল ব্যবহার করছে।

Primary keys বা প্রাথমিক কী:

বাগ্মী মডেল বিবেচনা করে যে প্রতিটি টেবিলে 'id' নামে একটি প্রাথমিক কী রয়েছে। $primarykey অ্যাট্রিবিউটে একটি ভিন্ন নাম প্রদান করে আমরা এই কনভেনশনটিকে ওভাররাইড করতে পারি ।

  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class Flight extends Model  
  8. {  
  9.     /** 
  10.      * The primary key associated with the table. 
  11.      * 
  12.      * @var string 
  13.      */  
  14.     protected $primaryKey = 'post_id';  
  15. }  

ডিফল্টরূপে বাগ্মীতে প্রাথমিক কী হল একটি স্বয়ংক্রিয়-বর্ধিত পূর্ণসংখ্যার মান। আমরা যদি প্রাইমারি কী-তে নন-ইনক্রিমেন্টিং ভ্যালু দিতে চাই তাহলে আমাদের $incrementing অ্যাট্রিবিউট 'false' সেট করতে হবে।

public $incrementing = false;

আমরা যদি প্রাইমারি কী-তে অ-পূর্ণসংখ্যার মান দিতে চাই তাহলে $keyType অ্যাট্রিবিউটে আমাদের আলাদা মান দিতে হবে।

protected $keyType = 'string';

উপরে আমরা প্রাথমিক কী-তে স্ট্রিং টাইপ বরাদ্দ করছি।

Reading data বা রিডিং ডেটা:

এখন আমরা দেখব কিভাবে ডাটাবেস থেকে ডেটা পুনরুদ্ধার করা যায়। একটি উদাহরণের মাধ্যমে বোঝা যাক।

প্রথমত আমাদের একটি মডেল ক্লাসে দুটি বৈশিষ্ট্য যুক্ত করতে হবে।

Post.php

  1. namespace App;  
  2. use Illuminate\Database\Eloquent\Model;  
  3. class Post extends Model  
  4. {  
  5.     //  
  6. protected $table='posts';  
  7. protected $primaryKey='id';  

আমরা ডাটাবেস থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত রুট যোগ করি।

web.php

  1. <?php  
  2. use App\Post;  
  3. Route::get('/read',function(){  
  4. $posts=Post::all();  
  5. foreach($posts as $post)  
  6. {  
  7.   echo $post->body;  
  8.   echo ?<br>?;  
  9. }  
  10. });  

উপরের কোডে আমরা all() পদ্ধতিটি ব্যবহার করি যা ডাটাবেস থেকে সমস্ত রেকর্ড পুনরুদ্ধার করে এবং তারপরে আমরা ডাটাবেসে উপলব্ধ সমস্ত সারিগুলির বডি নাম পুনরুদ্ধার করতে foreach লুপ প্রয়োগ করি যা নীচে দেখানো হয়েছে।

নীচের স্ক্রিনশটে আমরা দেখতে পাচ্ছি যে দুটি রেকর্ড পোস্ট টেবিলে উপলব্ধ।

আউটপুট

যখন আমরা url, localhost/firstproject/public/read রান করি তখন আউটপুট হবে।

আমরা যদি ডাটাবেস থেকে নির্দিষ্ট রেকর্ড পুনরুদ্ধার করতে চাই তাহলে আমরা find() পদ্ধতি ব্যবহার করি।

  1. Route::get('/find',function(){  
  2. $posts=Post::find(2);  
  3. return $posts->title;  
  4. });  

আউটপুট

উপরের কোডের আউটপুট দেখতে url, localhost/firstproject/public/find রান করুন।

ডেটা রিডিং সীমাবদ্ধতা:

একটি একক সারি পুনরুদ্ধার করতে আমরা first() পদ্ধতিটি ব্যবহার করি যা নীচে দেখানো হয়েছে।

  1. Route::get('/find',function(){  
  2. $posts=Post::where('id',2)->first();  
  3. return $posts;  
  4. });  

আউটপুট

যদি আমাদের পুরো সারিটি পুনরুদ্ধার করার প্রয়োজন না হয় তাহলে আমরা সরাসরি একটি কলামের মান পুনরুদ্ধার করতে value() পদ্ধতি ব্যবহার করতে পারি।

  1. Route::get('/find',function(){  
  2. $posts=Post::where('id',1)->value('title');  
  3. return $posts;  
  4. });  

আউটপুট

Inserting data বা ইনসার্টিং ডেটা:

এখন আমরা দেখব কিভাবে একটি ডাটাবেসে তথ্য সন্নিবেশ করা যায়। আসুন নীচে দেওয়া একটি উদাহরণ দেখি।

  1. Route::get('/insert',function(){  
  2. $post=new Post;  
  3. $post->title='Nishka';  
  4. $post->body='QA Analyst';  
  5. $post->save();  
  6. });  

আউটপুট

একটি ওয়েব ব্রাউজারে url, localhost/firstproject/public/insert রান করুন। ইউআরএল রান করার  পরে phpmyadmin খুলুন।

উপরের আউটপুট দেখায় যে ডেটা সফলভাবে সন্নিবেশ করা হয়েছে।

save() পদ্ধতির মাধ্যমে ডেটা আপডেট করা:

এছাড়াও আমরা save() পদ্ধতি ব্যবহার করে রেকর্ড আপডেট করতে পারি। একটি উদাহরণের মাধ্যমে বোঝা যাক।

  1. Route::get('/basicupdate',function(){  
  2. $post=Post::find(2);  
  3. $post->title='Haseena';  
  4. $post->body='Graphic Designer';  
  5. $post->save();  
  6. });  

আউটপুট

উপরের স্ক্রীনটি ডাটাবেস টেবিলটি দেখায় যা উপরের কোডটি কার্যকর করার আগে।

যখন আমরা উপরের কোডটি কার্যকর করি তখন নীচের স্ক্রিনে দেখানো ডেটা আপডেট হয়।

Mass Assignment:

ম্যাস অ্যাসাইনমেন্ট প্রদান করার জন্য আমাদের create() পদ্ধতি ব্যবহার করতে হবে এবং একটি মডেল ক্লাসে $fillable সম্পত্তি প্রদান করতে হবে।

একটি উদাহরণের মাধ্যমে বোঝা যাক।

প্রথমে রুট তৈরি করুন এবং আমরা ক্লোজার ফাংশনে create() মেথড যোগ করেছি। create() মেথডটি মূলত একটি নতুন রেকর্ড যোগ করে এবং এর প্যারামিটারের মাধ্যমে মান প্রদান করা হয়। প্রথমে রুট তৈরি করুন এবং আমরা ক্লোজার ফাংশনে create() মেথড যোগ করেছি। create() পদ্ধতিটি মূলত একটি নতুন রেকর্ড যুক্ত করছে এবং মানগুলি এর প্যারামিটারের মাধ্যমে সরবরাহ করা হয়।

  1. Route::get('/create',function(){  
  2. Post::create(['title'=>'Harshita','body'=>'Technical Content Writer']);  
  3. });  

ম্যাস অ্যাসাইনমেন্ট প্রদান করতে নিচের কোডে দেখানো মডেল ক্লাসে $fillable অ্যাট্রিবিউট যোগ করতে হবে।

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. class Post extends Model  
  5. {  
  6.     //  
  7. protected $table='posts';  
  8. protected $primaryKey='id';  
  9. protected $fillable=  
  10. [  
  11. 'title',  
  12. 'body'  
  13. ];  
  14. }  

আউটপুট

উপরের কোডটি চালানোর জন্য url, localhost/firstproject/public/create রান করুন

এখন ডাটাবেস দেখুন।

উপরের হাইলাইট-এরিয়া দেখায় যে নতুন রেকর্ডটি সফলভাবে তৈরি করা হয়েছে।

Eloquent দিয়ে ডেটা আপডেট:

এখন আমরা দেখব কিভাবে eloquent ব্যবহার করে ডেটা আপডেট করা যায়। একটি উদাহরণের মাধ্যমে বোঝা যাক।

প্রথমে রুট তৈরি করুন।

  1. Route::get('/update',function(){  
  2. Post::where('id',1)->update(['title'=>'Charu','body'=>'technical Content Writer']);  
  3. });  

উপরের কোডে আমরা মডেল ক্লাসের update() পদ্ধতি ব্যবহার করি। আমরা 1 এর সমান আইডি থাকা রেকর্ডটি আপডেট করছি।

আউটপুট

Deleting Data বা ডেটা ডিলিটিং:

এখন, আমরা দেখব কিভাবে Eloquent ব্যবহার করে ডেটা মুছে ফেলা যায়। আমরা eloquent মডেল ক্লাসে উপলব্ধ delete() পদ্ধতিটি সরাসরি প্রয়োগ করি।

ডেটা মুছে ফেলার বিভিন্ন উপায় রয়েছে।

প্রথম উপায় হল find() এবং delete() পদ্ধতি ব্যবহার করা।

  1. Route::get('/delete',function(){  
  2. $post=Post::find(1);  
  3. $post->delete();  
  4. });  

আউটপুট

দ্বিতীয় উপায় হল destroy() পদ্ধতি ব্যবহার করা।

  1. Route::get('/destroy',function(){  
  2. Post::destroy(2);  
  3. });  

আউটপুট

আমরা যদি একাধিক সারি ধ্বংস করতে চাই।

  1. Route::get('/destroy',function(){  
  2. Post::destroy([3,4]);  
  3. });  

উপরের কোডটি আইডি 3 এবং 4 থাকা রেকর্ডগুলি ধ্বংস করছে।

আউটপুট

তৃতীয় উপায় হল query ব্যবহার করা।

  1. Route::get('/delete1',function(){  
  2. Post::where('id',5)->delete();  
  3. });  

আউটপুট

Soft Deleting/Trashing:

রেকর্ড মুছে ফেলার আরেকটি উপায় আছে সফট ডিলিটিং। যখন মডেলগুলি নরম মুছে ফেলা হয় এর মানে হল যে রেকর্ডগুলি আসলে ডাটাবেস থেকে সরানো হয় না। নরম মুছে ফেলার ক্ষেত্রে রেকর্ড স্থায়ীভাবে মুছে ফেলা হয় না তারা আবর্জনা স্থান সংরক্ষণ করা হয়।

আসুন একটি উদাহরণের মাধ্যমে বুঝতে পারি কীভাবে সফ্ট ডিলিটিং করা হয়।

প্রথমে আমাদের মডেল ক্লাসে deleted_at অ্যাট্রিবিউট সেট করতে হবে ।

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. use Illuminate\Database\Eloquent\SoftDeletes;  
  5. class Post extends Model  
  6. {  
  7.  use SoftDeletes;  
  8. protected $table='posts';  
  9. protected $primaryKey='id';  
  10. protected $dates=['deleted_at'];  

এখন পোস্ট টেবিলে একটি মুছে ফেলা কলাম যোগ করতে মাইগ্রেশন করুন ।

যেহেতু আমরা add_column_deleted_at নাম দিয়ে মাইগ্রেশন তৈরি করেছি তার গঠন নিচে দেওয়া হল।

  1. <?php  
  2.   
  3. use Illuminate\Support\Facades\Schema;  
  4. use Illuminate\Database\Schema\Blueprint;  
  5. use Illuminate\Database\Migrations\Migration;  
  6.   
  7. class AddColumnDeletedAt extends Migration  
  8. {  
  9.     /** 
  10.      * Run the migrations. 
  11.      * 
  12.      * @return void 
  13.      */  
  14.     public function up()  
  15.     {  
  16.         Schema::table('posts'function (Blueprint $table) {  
  17.             $table->softDeletes();  
  18.         });  
  19.     }  
  20.   
  21.     /** 
  22.      * Reverse the migrations. 
  23.      * 
  24.      * @return void 
  25.      */  
  26.     public function down()  
  27.     {  
  28.         Schema::table('posts'function (Blueprint $table) {  
  29.             $table->dropColumn('deleted_at');  
  30.         });  
  31.     }  
  32. }  

লারাভেলে softDeletes() নামে পরিচিত সহায়ক পদ্ধতি রয়েছে যা আমরা উপরের কোডে ব্যবহার করেছি। softDeletes() পদ্ধতিটি কলাম তৈরি করতে ব্যবহৃত হয়।

এখন php artisan migrate কমান্ডটি চালান ।

শেষে সফট-ডিলিট চালানোর জন্য web.php ফাইলে রুট যোগ করুন।

  1. Route::get('/softdelete',function(){  
  2. Post::find(1)->delete();  
  3. });  

উপরের কোডে আমরা সেই রেকর্ডটি সফট-ডিলিট করছি যার আইডি '1' আছে।

আউটপুট

উপরের স্ক্রিনে deleted_at কলামটি দেখায় যে সময়ে এই রেকর্ডটি soft-deleted করা হয়েছে। যদি এই কলামে নাল মান থাকে তাহলে এর মানে হল যে এই রেকর্ডটি soft-deleted করা হয়নি।

Retrieving deleted/trashed data:

মুছে ফেলা ডেটা পুনরুদ্ধার করতে আমরা withTrashed() পদ্ধতি ব্যবহার করি। একটি উদাহরণের মাধ্যমে বিষয়টি বোঝা যাক।

  1. Route::get('/readsofdelete',function(){  
  2. $post=Post::withTrashed()->where('id',1)->get();  
  3. return $post;  
  4. });  

উপরে আমরা ট্র্যাশ বা নরম মুছে ফেলা রেকর্ড পুনরুদ্ধার করছি।

আউটপুট

Restoring deleted/trashed data:

আগের টপিকে আমরা দেখেছি কিভাবে সফট-ডিলিটেড মডেল থেকে ডেটা পুনরুদ্ধার করা যায়। এখন আমরা দেখব কিভাবে ডাটা ট্র্যাশ স্পেস থেকে আসল জায়গায় ফিরিয়ে আনা যায়। একটি উদাহরণের মাধ্যমে বিষয়টি বোঝা যাক।

  1. Route::get('/restore',function(){  
  2. Post::withTrashed()->where('id',1)->restore();  
  3. });  

উপরের কোডে আমরা restore() ফাংশন ব্যবহার করে ট্র্যাশ করা ডেটা পুনরুদ্ধার করছি।

আউটপুট

উপরের স্ক্রীনটি দেখায় যে deleted_at column এর মান হল NULL যার মানে রেকর্ডটি একটি ডাটাবেসে পুনরুদ্ধার করা হয়েছে।

Deleting records permanently:

কখনও কখনও আমাদের স্থায়ীভাবে ডেটা সরাতে হবে। সফ্ট-মুছে ফেলা মডেল স্থায়ীভাবে মুছে ফেলতে আমরা forceDelete() পদ্ধতি ব্যবহার করি। একটি উদাহরণের মাধ্যমে বিষয়টি বোঝা যাক।

  1. Route::get('/forcedelete',function(){  
  2. Post::onlyTrashed()->forceDelete();  
  3. });  

উপরের কোডে আমরা ট্র্যাশ করা ডেটা মুছে দিচ্ছি।

উপরের কোডটি কার্যকর করার আগে ট্র্যাশ করা রেকর্ডে নীচের স্ক্রিনশটে দেখানো 1 এর সমান একটি আইডি রয়েছে।

যখন আমরা উপরের কোডটি রান করব তখন ট্র্যাশ করা রেকর্ডটি মুছে যাবে এবং টেবিলটি চাইবে যেমনটি নীচে দেখানো হয়েছে।

আপনাদের সুবিধার্থে আমি আমার টিপস এন্ড ট্রিকসগুলি ভিডিও আকারে শেয়ার করার জন্য একটি ইউটিউব চ্যানেল তৈরি করেছি। আশা করি চ্যানেলটি Subscribe করবেন।

সৌজন্যে : বাংলাদেশের জনপ্রিয় এবং বর্তমান সময়ের বাংলা ভাষায় সকল গুরুত্বপূর্ণ বিষয়ক টিউটোরিয়াল সাইট - www.TutorialBD71.blogspot.com নিত্যনতুন বিভিন্ন বিষয়ে টিউটোরিয়াল পেতে সাইটটিতে সবসময় ভিজিট করুন।

Leave a Comment