সম্পর্ক (OneToOne, OneToMany, ManyToMany)

Doctrine ORM এর মাধ্যমে ডেটাবেজ ইন্টিগ্রেশন - সিম্ফনি (Symfony) - Web Development

247

Symfony এবং Doctrine ORM (Object-Relational Mapping) ব্যবহারের মাধ্যমে একাধিক সম্পর্ক (OneToOne, OneToMany, ManyToMany) তৈরি এবং পরিচালনা করা সম্ভব। এই সম্পর্কগুলো ডাটাবেস টেবিলের মধ্যে একাধিক রেকর্ডের মধ্যে লিঙ্ক স্থাপন করে এবং অ্যাপ্লিকেশনের মধ্যে ডেটা পরিচালনাকে আরও সহজ করে তোলে।

Doctrine ORM এবং সম্পর্ক

Doctrine ORM Symfony-তে ডাটাবেস ম্যানিপুলেশনকে সহজ এবং অবজেক্ট-ওরিয়েন্টেড করে তোলে। Doctrine ব্যবহার করে আপনি এন্টিটিজি (Entities) তৈরি করে ডাটাবেসের টেবিলগুলির সাথে সম্পর্ক স্থাপন করতে পারেন।

Doctrine-এ সম্পর্কের মূল ধরণগুলি হল:

  1. OneToOne: একে অপরের সাথে সম্পর্কিত দুটি একক রেকর্ড।
  2. OneToMany: এক রেকর্ডের সাথে অনেক রেকর্ড সম্পর্কিত।
  3. ManyToMany: একাধিক রেকর্ড একে অপরের সাথে সম্পর্কিত।

OneToOne সম্পর্ক

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

এন্টিটি উদাহরণ:

User Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class User
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $name;

    #[ORM\OneToOne(targetEntity: 'Profile', mappedBy: 'user')]
    private $profile;

    public function getProfile(): ?Profile
    {
        return $this->profile;
    }

    public function setProfile(Profile $profile): self
    {
        $this->profile = $profile;
        return $this;
    }
}

Profile Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Profile
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $bio;

    #[ORM\OneToOne(targetEntity: 'User', inversedBy: 'profile')]
    #[ORM\JoinColumn(nullable: false)]
    private $user;

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(User $user): self
    {
        $this->user = $user;
        return $this;
    }
}

এখানে, User এন্টিটি একটি Profile এন্টিটির সাথে সম্পর্কিত এবং এটি mappedBy এবং inversedBy ব্যবহার করে OneToOne সম্পর্ক স্থাপন করেছে।


OneToMany সম্পর্ক

OneToMany সম্পর্কের মাধ্যমে একটি রেকর্ডের সাথে অনেক রেকর্ড সম্পর্কিত থাকে। উদাহরণস্বরূপ, একটি ব্লগ পোস্টের সাথে অনেক মন্তব্য থাকতে পারে, কিন্তু প্রতিটি মন্তব্য একটি নির্দিষ্ট ব্লগ পোস্টের সাথে সম্পর্কিত।

এন্টিটি উদাহরণ:

Post Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Post
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $title;

    #[ORM\OneToMany(targetEntity: 'Comment', mappedBy: 'post')]
    private $comments;

    public function __construct()
    {
        $this->comments = new ArrayCollection();
    }

    public function getComments(): Collection
    {
        return $this->comments;
    }
}

Comment Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Comment
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $content;

    #[ORM\ManyToOne(targetEntity: 'Post', inversedBy: 'comments')]
    #[ORM\JoinColumn(nullable: false)]
    private $post;

    public function getPost(): ?Post
    {
        return $this->post;
    }

    public function setPost(Post $post): self
    {
        $this->post = $post;
        return $this;
    }
}

এখানে, Post এন্টিটি Comment এন্টিটির সাথে OneToMany সম্পর্ক স্থাপন করেছে। এটি mappedBy এবং inversedBy এর মাধ্যমে সম্পর্ক স্থাপন করেছে। Comment এন্টিটি ManyToOne সম্পর্ক ব্যবহার করে Post এর সাথে যুক্ত।


ManyToMany সম্পর্ক

ManyToMany সম্পর্কের মাধ্যমে অনেক রেকর্ড একে অপরের সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, অনেক ছাত্র বিভিন্ন কোর্সে রেজিস্টার করতে পারে এবং একটি কোর্সে অনেক ছাত্র থাকতে পারে।

এন্টিটি উদাহরণ:

Student Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Student
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $name;

    #[ORM\ManyToMany(targetEntity: 'Course', mappedBy: 'students')]
    private $courses;

    public function __construct()
    {
        $this->courses = new ArrayCollection();
    }

    public function getCourses(): Collection
    {
        return $this->courses;
    }
}

Course Entity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Course
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string')]
    private $title;

    #[ORM\ManyToMany(targetEntity: 'Student', inversedBy: 'courses')]
    #[ORM\JoinTable(name: 'student_courses')]
    private $students;

    public function __construct()
    {
        $this->students = new ArrayCollection();
    }

    public function getStudents(): Collection
    {
        return $this->students;
    }
}

এখানে, Student এবং Course এন্টিটি ManyToMany সম্পর্কের মধ্যে রয়েছে। Student অনেক Course-এ থাকতে পারে এবং Course-এ অনেক Student থাকতে পারে। এখানে JoinTable ব্যবহার করা হয়েছে, যা সম্পর্কিত টেবিলের জন্য একটি মিডিয়েটিং টেবিল তৈরি করে।


Doctrine মাইগ্রেশন

উপরোক্ত সম্পর্কগুলির মাধ্যমে, Doctrine ORM স্বয়ংক্রিয়ভাবে ডাটাবেস স্কিমার জন্য উপযুক্ত মাইগ্রেশন তৈরি করতে পারে।

মাইগ্রেশন তৈরি করা:

php bin/console make:migration

মাইগ্রেশন চালানো:

php bin/console doctrine:migrations:migrate

সারাংশ

Doctrine ORM Symfony-তে OneToOne, OneToMany, এবং ManyToMany সম্পর্ক ব্যবস্থাপনা সহজ করে তোলে। এই সম্পর্কগুলো ডাটাবেসের মধ্যে সম্পর্কিত টেবিলগুলির মধ্যে লিঙ্ক স্থাপন করে এবং ডেটা ব্যবস্থাপনাকে আরও কার্যকর ও মডুলার করে। Doctrine ব্যবহার করে আপনি সহজেই এসব সম্পর্ক নির্ধারণ করতে এবং ম্যানেজ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...