Laravel এর পলিমরফিক রিলেশনশিপ — Polymorphic relationships | Part 15
Laravel এর পলিমরফিক রিলেশনশিপ ( Polymorphic relationships ) সম্পর্কে সহজ বাংলায় বিস্তারিত ধারণা পান। কীভাবে কাজ করে, কোড উদাহরণ এবং সুবিধা-অসুবিধা সম্পর্কে জানুন।
প্রিয় বন্ধু, আমি আপনাকে Laravel এর Database Advanced Polymorphic relationships সম্পর্কে শিক্ষা দিতে চাই। পলিমরফিক সম্পর্ক হল একটি শক্তিশালী ফিচার যা আপনাকে একটি মডেলকে একাধিক মডেলের সাথে সম্পর্কিত করতে দেয়।
কীভাবে কাজ করে পলিমরফিক সম্পর্ক
পলিমরফিক সম্পর্কে, আপনি একটি পলিমরফিক মডেল তৈরি করেন যার মধ্যে একটি polymorphic_id কলাম থাকে। এটি একটি নাল-টাইপ কলাম যা বিভিন্ন মডেলের প্রাইমারি কীর মান ধারণ করে।
উদাহরণস্বরূপ, আপনি কমেন্ট, পোস্ট এবং ভিডিও মডেল থাকতে পারে যা প্রত্যেকের নিজস্ব প্রাইমারি কী রয়েছে। তারপর আপনি একটি রেটিংস মডেল তৈরি করতে পারেন যেটির মধ্যে polymorphic_id কলাম রয়েছে যা কমেন্ট, পোস্ট বা ভিডিওর আইডি ধারণ করতে পারে।
উদাহরণ
// Comment Model
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}// Post Modelclass Post extends Model {} // Video Modelclass Video extends Model {}
// Ratings Modelclass Rating extends Model
{
public function ratable()
{
return $this->morphTo();
}
}
এখানে Comment, Post এবং Video মডেলগুলো নিজেদের মধ্যে প্রাইমারি কী আছে কিন্তু Rating মডেলে polymorphic_id কলাম রয়েছে যা যে কোন মডেলের প্রাইমারি কী ধারণ করতে পারে।
এটি আপনাকে একই রেটিং সিস্টেমকে বিভিন্ন ধরনের মডেলের জন্য ব্যবহার করতে দেয়।
পলিমরফিক সম্পর্কের সুবিধা
- কোড পুনরুদ্ধার করা যায় কারণ একই সিস্টেমটি বিভিন্ন মডেলের জন্য ব্যবহার করা যেতে পারে।
- ডাটাবেস টেবিলের সংখ্যা কমে যায় কারণ সম্পর্কগুলি একই টেবিলে সংরক্ষণ করা হয়।
- কোয়েরি করা সহজ কারণ সম্পর্কগুলি একই টেবিলে আছে।
- পরিবর্তন সহজ কারণ নতুন মডেল যুক্ত করলে টেবিল স্কিমা পরিবর্তনের প্রয়োজন হয় না।
সাধারণত, পলিমরফিক সম্পর্ক ব্যবহার করা উচিত যখন একটি মডেল অন্যান্য একাধিক মডেলের সাথে সম্পর্কিত হতে পারে। এটি কোড পুনরুদ্ধারযোগ্যতা বৃদ্ধি করে এবং আপনার ডাটাবেস ডিজাইনকে স্বচ্ছ রাখে।
উদাহরণ এবং ব্যবহার
আসুন একটি পোস্ট এবং কমেন্ট মডেলের সাথে একটি সরল পলিমরফিক সম্পর্কের উদাহরণ দেখি।
class Post extends Model
{
public function comments()
{
return $this->morphMany('App\Comment', 'commentable');
}
}
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}
এখানে পোস্ট মডেল hasMany সম্পর্ক ধারণ করে Comment মডেলের সাথে যেখানে Comment morphMany সম্পর্কের মাধ্যমে ‘commentable’ হিসাবে পলিমরফিক টার্গেট।
এটি পোস্ট মডেলকে Comment মডেল থেকে অনেকগুলো সম্পর্ক ধারণ করতে দেয়।
পলিমরফিক টাইপ
পলিমরফিক সম্পর্ক তৈরির সময় morphMap মেথড ব্যবহার করা প্রয়োজন। এটি পলিমরফিক মডেল কোন মডেলে মর্ফ করবে তা সূচিত করে।
উদাহরণ:
public function morphMap() {
return [
'post' => 'App\Post',
'video' => 'App\Video',
];
}
এখানে ‘post’ এবং ‘video’ হল পলিমরফিক টাইপ। এগুলো ডাটাবেসে সংরক্ষণ করা হবে এবং পলিমরফিক মডেলকে সঠিক মডেলে মর্ফ করতে ব্যবহৃত হবে।
লুকআপ টেবিল
পলিমরফিক সম্পর্কের জন্য লুকআপ টেবিল প্রয়োজনীয়। এটিতে সম্পর্কিত মডেলের আইডি এবং পলিমরফিক টাইপ সংরক্ষণ করা হয়।
উদাহরণ:
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->integer('commentable_id');
$table->string('commentable_type'); $table->text('message');
$table->timestamps();
});
এখানে commentable_id এবং commentable_type কলামগুলো লুকআপ টেবিলের কলাম যা সম্পর্কিত মডেলের তথ্য ধারণ করে।
সাবলীল বিষয়াদি
- Polymorphic সম্পর্ক কোড পুনরুদ্ধারযোগ্যতা বাড়ায় এবং ডাটাবেস ডিজাইনকে স্বচ্ছ রাখে।
- একই সিস্টেমকে বিভিন্ন মডেলের জন্য পুনরায় ব্যবহার করা যায়।
- ডাটাবেসের টেবিল সংখ্যা কমে যায় যা কোয়েরিতে সুবিধা করে।
- লুকআপ টেবিল ব্যবহার করে সম্পর্কিত মডেল ID ট্র্যাক করা হয়।
- নতুন মডেল যোগ করা সহজ কারণ টেবিল স্কিমা পরিবর্তনের প্রয়োজন হয় না।
- মডেল মধ্যে পলিমরফিক টাইপ ম্যাপিং থাকে যা সঠিক মডেলে মর্ফিং সম্ভব করে।
- সবচেয়ে ভালো অনুশীলন হিসাবে মর্ফ ম্যাপ মডেলে রাখা উচিত।