লারাভেল রিলেশনশিপ:

একটি Eloquent relationship লারাভেলের একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে খুব সহজ বিন্যাসে টেবিলগুলিকে রিলেট করতে দেয়।

One to one relationship:

One to one relationship বিভিন্ন টেবিলের কলামের মধ্যে এক-এক সম্পর্ক প্রদান করে। উদাহরণস্বরূপ প্রতিটি ব্যবহারকারী একটি একক পোস্ট বা একাধিক পোস্টের সাথে যুক্ত কিন্তু এই সম্পর্কের মধ্যে আমরা একজন ব্যবহারকারীর একক পোস্ট পুনরুদ্ধার করব। একটি সম্পর্ক সংজ্ঞায়িত করার জন্য আমাদের প্রথমে ব্যবহারকারী মডেলে post() পদ্ধতিটি সংজ্ঞায়িত করতে হবে। post() পদ্ধতিতে আমাদের hasOne() পদ্ধতি প্রয়োগ করতে হবে যা ফলাফল প্রদান করে।

আসুন একটি উদাহরণের মাধ্যমে ওয়ান টু ওয়ান সম্পর্কটি বুঝতে পারি।

প্রথমে আমরা পোস্ট নামে একটি বিদ্যমান টেবিলে নতুন কলাম (user_id) যোগ করি । এখানে user_id হল foreign কী।

নীচের কমান্ডটি ব্যবহার করে একটি ডাটাবেসে উপরের পরিবর্তনগুলি স্থানান্তর করুন।

php artisan migrate .

মাইগ্রেশনের পর পোস্ট টেবিলের গঠন নিচের স্ক্রিনশটে দেখানো হয়েছে।

উপরের স্ক্রিনশটটি দেখায় যে user_id কলামটি সফলভাবে যোগ করা হয়েছে।

 

User.php ফাইলটি খুলুন এবং User.php ফাইলে নিম্নলিখিত কোডটি যোগ করুন ।

  1. public function post()  
  2. {  
  3.   return $this->hasOne('App\Post');  
  4. }  

উপরের কোডে আমরা hasOne() পদ্ধতি প্রয়োগ করেছি যেটিতে একক আর্গুমেন্ট রয়েছে অর্থাৎ সম্পর্কিত মডেলের নাম। ডিফল্টরূপে পোস্টটি user_id কে একটি বিদেশী কী হিসাবে বিবেচনা করে। post () পদ্ধতিটি পোস্ট টেবিল অনুসন্ধান করে যেমন আমরা নামস্থান 'App/Post' উল্লেখ করেছি এবং কলাম user_id সন্ধান করি । আমরা দ্বিতীয় যুক্তি হিসাবে একটি বিদেশী কী প্রদান করে এই কনভেনশনটিকে ওভাররাইড করতে পারি। এটি এইভাবে পুনরায় লেখা যেতে পারে।

  1. <?php  
  2. use App\User;  
  3. Route::get('/user',function()  
  4. {  
  5.   return User::find(1)->post;  
  6. }  
  7. );  

উপরের কোডটি একটি আইডি নম্বর 1 সহ ব্যবহারকারীকে খুঁজে বের করছে এবং তারপর 1 এর সমান user_id থাকা ব্যবহারকারীর পোস্ট খুঁজে পেতে পোস্টটি বাস্তবায়ন করছে ।

আউটপুট

Inverse Relation বা বিপরীত সম্পর্ক:

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

প্রথমে, আমরা web.php ফাইলে রুট তৈরি করি ।

  1. <?php  
  2. use App\Post;  
  3. Route::get('/post/user',function()  
  4. {  
  5.  return Post::find(1)->user->name;  
  6. });  

Post.php file(model) খুলুন যা আমরা আগে তৈরি করেছি।

  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 $fillable=  
  11. [  
  12. 'title',  
  13. 'body'  
  14. ];  
  15. protected $dates=['deleted_at'];  
  16. public function user()  
  17. {  
  18.   return $this->belongsTo('App\User');  
  19. }  
  20.   
  21. }  

আউটপুট

One-to-many relationship বা এক থেকেেএকাধিক সম্পর্ক:

লারাভেল এক থেকে একাধিক সম্পর্কও প্রদান করে।

প্রথমত আমরা সেই রুটটি সংজ্ঞায়িত করি যা একক ব্যবহারকারীর সমস্ত পোস্ট খুঁজে বের করে।

  1. Route::get('/posts',function(){  
  2. $user=User::find(1);  
  3. foreach($user->posts as $post){  
  4. echo $post->title."<br>";  
  5. }  
  6. });  

User.php(model) ফাইলে নিম্নলিখিত কোড যোগ করুন ।

  1. public function posts()  
  2. {  
  3.     return $this->hasMany('App\Post','user_id');  
  4. }  

আউটপুট

Many-to-Many relationship বা অনেকের সাথে অনেকের সম্পর্ক:

এক-থেকে-এক সম্পর্ক এবং এক-থেকে-অনেকের সম্পর্কের চেয়ে বহু-থেকে-অনেক সম্পর্ক আরও জটিল। বহু-থেকে-অনেক সম্পর্ককে সংজ্ঞায়িত করতে আমাদের একটি পিভট টেবিল তৈরি করতে হবে। পিভট টেবিলটি মূলত একটি লুক আপ টেবিল যা দুটি টেবিলের সাথে সম্পর্কযুক্ত। উদাহরণস্বরূপ একজন ব্যবহারকারীর বিভিন্ন ভূমিকা থাকতে পারে যেখানে ভূমিকা অন্য ব্যবহারকারীদের দ্বারা ভাগ করা যেতে পারে যেমন অনেক ব্যবহারকারীর 'Admin' -এর ভূমিকা থাকতে পারে। ব্যবহারকারী এবং ভূমিকার মধ্যে সম্পর্ক নির্ধারণ করতে আমাদের তিনটি টেবিল তৈরি করতে হবে ব্যবহারকারী, ভূমিকা এবং ভূমিকা_ব্যবহারকারী। আমাদের ডাটাবেসে ব্যবহারকারী টেবিল ইতিমধ্যে তৈরি করা হয়েছে; আমাদের দুটি টেবিল তৈরি করতে হবে যেমন ভূমিকা টেবিল এবং পিভট টেবিল (roles_user)

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

php artisan make:model Role -m


উপরের স্ক্রীনটি দেখায় যে ভূমিকা টেবিল তৈরি করা হয়েছে। create_roles_table.php database/migration ডিরেক্টরিতে তৈরি করা হয়েছে । এই ফাইলের গঠন নিচে দেওয়া হল।

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

উপরের কোডে আমরা 'name' নামে নতুন কলাম যুক্ত করেছি। 'name' কলাম একজন ব্যবহারকারীর ভূমিকার নাম নির্ধারণ করে।

এখন আমাদের দুটি টেবিল রয়েছে ভূমিকা টেবিল এবং ব্যবহারকারীর টেবিল। এই দুটি টেবিলের সাথে সম্পর্ক স্থাপন করতে আমাদের পিভট টেবিল roles_user টেবিল তৈরি করতে হবে।


উপরের স্ক্রীনটি দেখায় যে roles_user টেবিলটি তৈরি করা হয়েছে। Create_roles_user_table এর গঠন নিচে দেওয়া হল।

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

উপরের কোডে আমরা দুটি নতুন কলাম user_id এবং role_id যোগ করেছি।

নীচের কমান্ডটি ব্যবহার করে উপরের সমস্ত পরিবর্তনগুলি স্থানান্তর করুন।

php artisan migrate

নীচের স্ক্রীনটি তিনটি টেবিল দেখায় অর্থাৎ  roles_user এবং ব্যবহারকারী তৈরি করা হয়েছে।


ভূমিকা টেবিলে উপলভ্য ডেটা।


ব্যবহারকারীর টেবিলে উপলভ্য ডেটা।


roles_user টেবিলে উপলভ্য ডেটা।


এখন আমরা রুট সংজ্ঞায়িত করব।

web.php

  1. Route::get('/roles/{id}',function($id){  
  2. $user=User::find($id);  
  3. foreach($user->role as $role)  
  4. {  
  5.    return $role->name;  
  6. }  
  7. });  

আমরা User.php ফাইলে নিম্নলিখিত কোড যোগ করি যা উভয় টেবিলের সাথে সম্পর্কিত।

  1. public function role()  
  2. {  
  3.    return $this->belongsToMany('App\Role','roles_user');  
  4. }   

উপরের কোডে belongsToMany() পদ্ধতিতে দুটি পরামিতি রয়েছে 'App\Role' যা রোল মডেল ব্যবহার করার জন্য নামস্থান এবং 'roles_user' হল পিভট টেবিলের নাম যা দুটি টেবিলের সাথে সম্পর্কযুক্ত। belongsToMany() পদ্ধতিটি এভাবেও লেখা যেতে পারে।

belongsToMany('App\Role','roles_user','user_id','role_id');

উপরের লাইনটিতে আরও দুটি প্যারামিটার রয়েছে user_id এবং role_iduser_id হল ব্যবহারকারী টেবিলের জন্য বিদেশী কী এবং role_id হল ভূমিকা টেবিলের জন্য বিদেশী কী।

আউটপুট

intermediate/pivot টেবিল এ অ্যাক্সেস করা:

বহু-থেকে-অনেক সম্পর্কে আমরা পিভট বা মধ্যবর্তী টেবিল তৈরি করি। এখন আমরা দেখব কিভাবে এই পিভট টেবিলটি পুনরুদ্ধার করা যায়।

e.

  1. <?php  
  2. Use App\User;  
  3. Route::get('/pivot',function(){  
  4. $user=User::find(1);  
  5. foreach($user->role as $role)  
  6. {  
  7.    return $role->pivot;  
  8. }  
  9. });  

উপরের মডেলে আমরা 1 এর সমান আইডি থাকা ব্যবহারকারীকে পুনরুদ্ধার করছি। তারপর foreach লুপ ব্যবহার করে আমরা রোল মডেলটি পুনরুদ্ধার করছি এবং পিভট অ্যাট্রিবিউটে বরাদ্দ করছি।

আমরা যদি পিভট টেবিল থেকে নির্দিষ্ট কলামটি পুনরুদ্ধার করতে চাই,

  1. public function role()  
  2. {  
  3. return $this->belongsToMany('App\Role','roles_user')->withPivot('created_at');  
  4. }   

web.php

  1. Route::get('/pivot',function(){  
  2. $user=User::find(1);  
  3. foreach($user->role as $role)  
  4. {  
  5.    return $role->pivot->created_at;  
  6. }  
  7. });  

আউটপুট


Has Many Through:

সম্পর্ক Has Many Through দূরবর্তী বা মধ্যবর্তী সম্পর্ক অ্যাক্সেস করার একটি সুবিধাজনক উপায় প্রদান করে। উদাহরণস্বরূপ আমাদের তিনটি টেবিল রয়েছে ব্যবহারকারী, পোস্ট এবং কান্ট্রি টেবিল। এখন আমরা ব্যবহারকারী মডেলের মাধ্যমে সেই দেশের অন্তর্গত পোস্টগুলি খুঁজে পেতে চাই।

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

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


কান্ট্রি টেবিলে ' নাম ' কলাম যোগ করুন।

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

নীচের কমান্ডটি ব্যবহার করে উপরের পরিবর্তনগুলি স্থানান্তর করুন।

php artisan migrate

এখন আমরা ব্যবহারকারীদের টেবিলে নতুন কলাম 'country_id' যোগ করি। নিচে দেওয়া কমান্ডটি ব্যবহার করুন।

php artisan make:migration add_new_column_column_id -table=users;

উপরের কমান্ডটি কার্যকর করার পরে add_new_column_column_id ফাইলটি database/migrations ডিরেক্টরিতে তৈরি করা হয়।

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

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

ডাটাবেসে উপরের পরিবর্তনগুলি স্থানান্তর করতে।

php artisan migrate

country.php(model) ফাইলটি খুলুন । আমরা কান্ট্রি মডেল ব্যবহার করে একটি নির্দিষ্ট দেশের পোস্ট টানতে যাচ্ছি।

country.php

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. class country extends Model  
  5. {  
  6.  public function posts(){     
  7.  return $this->hasManyThrough('App\Post','App\User','country_id','user_id');  
  8. }  
  9. }  

এখন আমরা সেই রুট যোগ করি যা একটি নির্দিষ্ট দেশের পোস্টগুলি বের করে।

  1. Route::get('/user/country',function()  
  2. {  
  3.   
  4.    $country=country::find(1);  
  5.    foreach($country->posts as $post)  
  6.    {  
  7.      return $post->title;  
  8.    }  
  9. });  

আউটপুট


Polymorphic relationship বা বহুরূপী সম্পর্ক:

One-to-many (Polymorphic) বা এক থেকে বহু (পলিমরফিক)

পলিমরফিক সম্পর্ক এক থেকে বহু সম্পর্কের অনুরূপ। যখন একটি একক মডেল একটি একক সমিতিতে একাধিক ধরণের মডেলের অন্তর্গত হয় তখন একে একে একে বহুরূপী সম্পর্ক বলা হয়। উদাহরণস্বরূপ যদি আমাদের তিনটি টেবিল থাকে পোস্ট, ব্যবহারকারী এবং ফটো টেবিল যেখানে ফটো টেবিল ব্যবহারকারী এবং পোস্ট টেবিলের সাথে বহুরূপী সম্পর্ককে উপস্থাপন করে।

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

আমরা ইতিমধ্যেই পূর্ববর্তী বিষয়ের ব্যবহারকারী এবং পোস্ট টেবিল তৈরি করেছি। এখন আমরা একটি ফটো টেবিল তৈরি করি।


মাইগ্রেশন ফোল্ডারে তৈরি create_photos_table.php ফাইলটি খুলুন ।

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

উপরের কোডে আমরা তিনটি কলাম, পাথ, imageable_id  এবং imageable_type যোগ করেছি । পাথটি ছবির পথ নির্ধারণ করে imageable_id হল ব্যবহারকারী বা পোস্টের আইডি মান এবং imageable_type হল মডেলের ক্লাস নাম।

আমরা পোস্ট টেবিল থেকে user_id কলামটি মুছে দেব যা আমরা আগে তৈরি করেছি।

ডাটাবেস টেবিলের দিকে তাকান।

একটি পোস্ট টেবিলে উপলভ্য ডেটা:


ব্যবহারকারীর টেবিলে উপলভ্য ডেটা:


ফটো টেবিলে উপলভ্য ডেটা:


ফটো মডেল ফাইল খুলুন ।

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. class photo extends Model  
  5. {  
  6. //  
  7. public function imageable()  
  8. {  
  9.  return $this->morphTo();  
  10. }} 

ব্যবহারকারী মডেল ফাইলে নিম্নলিখিত কোড যোগ করুন।

  1. public function photos()  
  2. {  
  3.   return $this->morphMany('App\Photo','imageable');  
  4. }  

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

  1. public function photos()  
  2. {  
  3.   return $this->morphMany('App\Photo','imageable');} 

এখন আমরা ব্যবহারকারী এবং পোস্ট উভয়ের জন্য রুট তৈরি করব।

  1. // Route for the users.  
  2. Route::get('/user/photo',function(){  
  3. $user=User::find(1);  
  4. foreach($user->photos as $photo)  
  5. {  
  6.    return $photo;  
  7. }  
  8. });  
  9.   
  10. // Route defined for the posts.  
  11. Route::get('/post/photo',function(){  
  12. $post=Post::find(1);  
  13. foreach($post->photos as $photo)  
  14. {  
  15.    return $photo;  
  16. }  
  17.   
  18. });  

আউটপুট


Inverse of one-to-many (polymorphic) relationship

এই টপিকে আমরা এক থেকে বহু বহুরূপী সম্পর্কের বিপরীত ক্রিয়া সম্পাদন করব। এখন পর্যন্ত আমরা ব্যবহারকারী এবং পোস্টের ছবি খুঁজে পেয়েছি। এখন আমরা ছবিটির মালিক খুঁজে বের করছি।

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

আমাদের web.php ফাইলে রুট তৈরি করতে হবে।

  1.  Route::get('/photo/{id}'function($id)  
  2. {  
  3.    $photo=Photo::findOrFail($id);  
  4.    return $photo->imageable;  
  5. });  

উপরের কোডে Photo::findOrFail($id) পদ্ধতি নির্ধারণ করে যে প্রদত্ত আইডির ফটো বিদ্যমান আছে কি না। যদি বিদ্যমান থাকে তাহলে এটি ' $photo->imageable ' বিবৃতির মাধ্যমে ছবির বিশদ বিবরণ প্রদান করে ।

আউটপুট


উপরের আউটপুটটি চিত্রের বিবরণ দেখায়।

Many-to-many polymorphic relationship

বহু-থেকে-অনেক বহুরূপী সম্পর্কের মধ্যে একটি লক্ষ্য মডেলে অনন্য রেকর্ড থাকে যা বিভিন্ন মডেলের মধ্যে ভাগ করা হয়। উদাহরণস্বরূপ একটি ট্যাগ টেবিল ভিডিও এবং পোস্ট টেবিলের মধ্যে বহুরূপী সম্পর্ক শেয়ার করে। একটি ট্যাগ টেবিলে ট্যাগগুলির অনন্য তালিকা থাকে যা টেবিল, ভিডিও এবং পোস্ট টেবিল উভয় দ্বারা ভাগ করা হয়।

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

প্রথমত আমরা অডিও, ট্যাগ এবং ট্যাগযোগ্য নামে ডেটাবেস মাইগ্রেশন সহ মডেলগুলি তৈরি করি ।


মডেলগুলি তৈরি করার পরে আমরা তাদের স্থানান্তরিত ফাইলগুলি সম্পাদনা করব।

'create_audio_table' নামে অডিও টেবিলের মাইগ্রেশন ফাইলটি খুলুন ।

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

উপরের কোডে আমরা $table->string('name') কমান্ড ব্যবহার করে অডিও টেবিলে নাম কলাম তৈরি করেছি।

'create_tag_table' নামে ট্যাগ মডেলের মাইগ্রেশন ফাইলটি খুলুন ।

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

উপরের কোডে আমরা $table->string('name') কমান্ড ব্যবহার করে ট্যাগ টেবিলে নাম কলাম তৈরি করেছি । .

'create_taggables_table' নামে ট্যাগযোগ্য মডেলের মাইগ্রেশন ফাইলটি খুলুন ।

  1. <?php  
  2. use Illuminate\Support\Facades\Schema;  
  3. use Illuminate\Database\Schema\Blueprint;  
  4. use Illuminate\Database\Migrations\Migration;  
  5. class CreateTaggablesTable extends Migration  
  6. {  
  7.     /** 
  8.      * Run the migrations. 
  9.      * 
  10.      * @return void 
  11.      */  
  12.     public function up()  
  13.     {  
  14.         Schema::create('taggables'function (Blueprint $table) {  
  15.             $table->bigIncrements('id');  
  16.             $table->integer('tag_id');  
  17.             $table->integer('taggable_id');  
  18.             $table->string('taggable_type');  
  19.             $table->timestamps();  
  20.         });  
  21.     }  
  22.   
  23.     /** 
  24.      * Reverse the migrations. 
  25.      * 
  26.      * @return void 
  27.      */  
  28.     public function down()  
  29.     {  
  30.         Schema::dropIfExists('taggables');  
  31.     }}  

উপরের কোডে আমরা ট্যাগএবল টেবিলে তিনটি নতুন কলাম যোগ করেছি যেমন tag_id, taggable_id এবং taggable_typeট্যাগ_আইডি ট্যাগ টেবিলের আইডি উপস্থাপন করে ট্যাগযোগ্য আইডি মডেল টেবিলের আইডি উপস্থাপন করে এবং ট্যাগযোগ্য টাইপ ক্লাসের নাম উপস্থাপন করে।

উপরের পরিবর্তনগুলি স্থানান্তর করতে আমরা নীচের কমান্ডটি ব্যবহার করি।

php artisan migrate

ডাটাবেস টেবিল দেখুন:

একটি অডিও টেবিলে উপলভ্য ডেটা:


পোস্ট টেবিলে উপলভ্য ডেটা:


ট্যাগ টেবিলে উপলভ্য ডেটা:


ট্যাগবল টেবিলে উপলভ্য ডেটা:


এখন আমরা মডেলে সম্পর্ক সংজ্ঞায়িত করি।

Audio.php

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. class Audio extends Model  
  5. {  
  6.   // get all the tags from the audio.   
  7.   public function tags()  
  8.   {  
  9.     return $this->morphToMany('App\Tag','taggable');  
  10.   }  
  11. }  

Post.php

  1. namespace App;  
  2. use App\Photo;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. use Illuminate\Database\Eloquent\SoftDeletes;  
  5. class Post extends Model  
  6. {  
  7. // get all the tags from this post.  
  8. public function tags()  
  9. {  
  10.   return $this->morphToMany('App\Tag','taggable');  
  11. }  
  12. }  

এখন আমরা রুট সংজ্ঞায়িত করব।

  1. use App\Post;  
  2. use App\Audio;  
  3. // Route for getting the tags from the Post model.  
  4. Route::get('/post/tags',function()  
  5. {  
  6.   $post=Post::find(1);   
  7.   foreach($post->tags as $tag)  
  8.   {  
  9.     return $tag->name;  
  10.   }});  
  11. //Route for getting the tags from the Audio model.  
  12. Route::get('/audio/tags',function()  
  13. {  
  14.   $audio=Audio::find(1);   
  15.   foreach($audio->tags as $tag)  
  16.   {  
  17.     return $tag->name;  
  18.   }});  

আউটপুট


পোস্টের রুট অ্যাক্সেস করার সময় আউটপুট হবে।


অডিও রুট অ্যাক্সেস করার সময় আউটপুট হবে।


nverse of many-to-many (polymorphic) relationship

বহু-থেকে-অনেক বহুরূপী সম্পর্কের মধ্যে আমরা পোস্ট এবং অডিও মডেলের ট্যাগগুলি খুঁজে পেয়েছি৷ কিন্তু বহু-থেকে-অনেকের (পলিমরফিক) একটি বিপরীত সম্পর্কের মধ্যে আমরা একটি নির্দিষ্ট ট্যাগের অন্তর্গত সমস্ত পোস্ট এবং অডিওগুলি খুঁজে বের করব।

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

প্রথমত আমরা একটি ট্যাগ মডেলে পদ্ধতিটি সংজ্ঞায়িত করি।

Tag.php

  1. <?php  
  2. namespace App;  
  3. use Illuminate\Database\Eloquent\Model;  
  4. class Tag extends Model  
  5. {  
  6.    // get all the posts from the tag.   
  7.    public function posts()  
  8.     {  
  9.       return $this->morphedByMany('App\Post','taggable');   
  10.     }  
  11. // get all the audios from the tag.  
  12. public function audios()  
  13.     {  
  14.       return $this->morphedByMany('App\Audio','taggable');   
  15.     }  
  16. }  

উপরের কোডে আমরা দুটি পদ্ধতি posts() এবং audios() সংজ্ঞায়িত করি । পোস্ট() পদ্ধতিতে আমরা একটি নির্দিষ্ট ট্যাগের অন্তর্গত সমস্ত পোস্ট পুনরুদ্ধার করছি। audios() পদ্ধতিতে আমরা একটি নির্দিষ্ট ট্যাগের অন্তর্গত সমস্ত অডিও পুনরুদ্ধার করছি।

এখন আমরা রুট সংজ্ঞায়িত করব।

  1. use App\Tag;  
  2. // Route for getting all the posts of a tag.  
  3. Route::get('/tag/post/{id}',function($id){  
  4. $tag=Tag::find($id);  
  5. foreach($tag->posts as $post)  
  6. {  
  7.    return $post->title;  
  8. }  
  9. });  
  10. // Route for getting all the audios of a tag.  
  11. Route::get('/tag/audio/{id}',function($id){  
  12. $tag=Tag::find($id);  
  13. foreach($tag->audios as $audio)  
  14. {  
  15.    return $audio->name;  
  16. }  
  17. });    

আউটপুট


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

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

Leave a Comment