Doctrine ORM এর পরিচিতি

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

239

Doctrine ORM (Object-Relational Mapping) হলো একটি PHP লাইব্রেরি যা ডাটাবেসের ডেটাকে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণায় রূপান্তর করে। এটি Symfony প্রজেক্টে ডাটাবেসের সাথে কাজ করতে ব্যবহৃত হয় এবং ডাটাবেস অপারেশন যেমন ইনসার্ট, আপডেট, ডিলিট, সিলেক্ট খুবই সহজ ও কার্যকরীভাবে পরিচালনা করতে সাহায্য করে। Doctrine ORM Symfony-এর ডিফল্ট ডাটাবেস ইন্টারফেস এবং এতে ডাটাবেসের সাথে ম্যানুয়ালি কাজ করার পরিবর্তে আপনি PHP অবজেক্টের মাধ্যমে ডেটা পরিচালনা করতে পারেন।


Doctrine ORM কী?

Doctrine ORM হল একটি শক্তিশালী ডাটাবেস ম্যানেজমেন্ট সিস্টেম, যা অবজেক্ট-রিলেশনাল মডেল (ORM) প্যাটার্ন অনুসরণ করে। এটি PHP অবজেক্টগুলিকে ডাটাবেসের টেবিল এবং রো-এর সাথে সম্পর্কিত করে। Doctrine-এ ডাটাবেসের প্রতিটি টেবিল একটি PHP ক্লাস দ্বারা প্রতিনিধিত্ব করা হয় এবং প্রতিটি টেবিলের রো একটি PHP অবজেক্টের মাধ্যমে কাজ করে।

Doctrine ORM এর প্রধান বৈশিষ্ট্য:

  1. অবজেক্ট-ওরিয়েন্টেড ডাটাবেস ম্যানেজমেন্ট: Doctrine ORM ডাটাবেসের টেবিলগুলিকে PHP ক্লাস হিসেবে ব্যবহার করে এবং প্রতিটি রো-কে অবজেক্ট হিসেবে প্রতিনিধিত্ব করে।
  2. ডাটাবেস অপারেশন সহজ করে: Doctrine ORM-এর মাধ্যমে ডাটাবেসের কার্যক্রম যেমন ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট পরিচালনা করা যায়, যা সাধারণ SQL কোডের তুলনায় অনেক বেশি সহজ এবং কমপ্যাক্ট।
  3. ডাটাবেসের সাথে একাধিক সম্পর্ক (Relations): Doctrine ORM একটি শক্তিশালী সম্পর্ক ব্যবস্থার (OneToMany, ManyToOne, ManyToMany) মাধ্যমে ডাটাবেসের টেবিলের মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে।
  4. SQL জেনারেশন স্বয়ংক্রিয়: Doctrine স্বয়ংক্রিয়ভাবে SQL কোড তৈরি করে, আপনাকে সোজাসুজি PHP অবজেক্টের সাথে কাজ করতে দেয়।

Doctrine ORM কিভাবে কাজ করে?

Doctrine ORM ব্যবহার করতে, আপনাকে প্রথমে একটি Entity (অথবা মডেল) তৈরি করতে হবে যা ডাটাবেসের টেবিলের প্রতিনিধিত্ব করবে। তারপর, Doctrine আপনাকে PHP ক্লাসের মাধ্যমে ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন করতে সাহায্য করবে।

Doctrine ORM এ Entity তৈরি করা

  1. Entity তৈরি:

    Symfony-তে Doctrine Entity তৈরি করতে, আপনি make:entity কমান্ড ব্যবহার করতে পারেন।

    কমান্ড:

    php bin/console make:entity
    

    উদাহরণ হিসেবে, একটি Product Entity তৈরি করা যেতে পারে:

    // src/Entity/Product.php
    namespace App\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    
    #[ORM\Entity]
    class Product
    {
        #[ORM\Id]
        #[ORM\GeneratedValue]
        #[ORM\Column(type: 'integer')]
        private $id;
    
        #[ORM\Column(type: 'string', length: 100)]
        private $name;
    
        #[ORM\Column(type: 'float')]
        private $price;
    
        public function getId(): ?int
        {
            return $this->id;
        }
    
        public function getName(): ?string
        {
            return $this->name;
        }
    
        public function setName(string $name): self
        {
            $this->name = $name;
            return $this;
        }
    
        public function getPrice(): ?float
        {
            return $this->price;
        }
    
        public function setPrice(float $price): self
        {
            $this->price = $price;
            return $this;
        }
    }
    
  2. ডাটাবেসে Entity তৈরি করা:

    এখন, Product Entity তৈরি হলে, ডাটাবেসে Entity এর জন্য টেবিল তৈরি করতে Doctrine মাইগ্রেশন ব্যবহার করতে হয়।

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

    php bin/console make:migration
    

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

    php bin/console doctrine:migrations:migrate
    
  3. ডাটাবেসে ডেটা ইনসার্ট করা:

    Doctrine এর মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট করা অনেক সহজ। এটি EntityManager ব্যবহার করে করা হয়।

    উদাহরণ:

    // src/Controller/ProductController.php
    namespace App\Controller;
    
    use App\Entity\Product;
    use Doctrine\ORM\EntityManagerInterface;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    
    class ProductController extends AbstractController
    {
        public function create(EntityManagerInterface $entityManager): Response
        {
            $product = new Product();
            $product->setName('Laptop')
                    ->setPrice(999.99);
    
            $entityManager->persist($product);  // Product কে EntityManager-এ পাস করা
            $entityManager->flush();  // ডেটাবেসে ইনসার্ট করা
    
            return new Response('Product created with ID ' . $product->getId());
        }
    }
    

Doctrine ORM এর সম্পর্ক

Doctrine ORM বিভিন্ন ধরনের সম্পর্ক সমর্থন করে, যা ডাটাবেসের টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে।

  1. OneToMany সম্পর্ক: একটি Entity অন্য Entity-এর একাধিক রেকর্ডের সাথে সম্পর্কিত।

    উদাহরণ:

    #[ORM\OneToMany(mappedBy: 'category', targetEntity: Product::class)]
    private $products;
    
  2. ManyToOne সম্পর্ক: একটি Entity একাধিক রেকর্ডের সাথে সম্পর্কিত, তবে অন্য Entity শুধুমাত্র একটির সাথে সম্পর্কিত।

    উদাহরণ:

    #[ORM\ManyToOne(targetEntity: Category::class, inversedBy: 'products')]
    #[ORM\JoinColumn(nullable: false)]
    private $category;
    
  3. ManyToMany সম্পর্ক: দুটি Entity একে অপরের সাথে একাধিক রেকর্ডের মাধ্যমে সম্পর্কিত।

    উদাহরণ:

    #[ORM\ManyToMany(targetEntity: Tag::class, mappedBy: 'products')]
    private $tags;
    

Doctrine ORM এর সুবিধা

  1. ডাটাবেস অ্যাবস্ট্রাকশন:
    Doctrine ORM ডাটাবেস এবং PHP কোডের মধ্যে একটি অ্যাবস্ট্রাকশন লেয়ার প্রদান করে, যার ফলে ডেভেলপারদের ডাটাবেসে ম্যানুয়ালি কোড লিখতে হয় না।
  2. সরাসরি SQL কোড লেখার প্রয়োজন নেই:
    Doctrine PHP অবজেক্টের মাধ্যমে ডেটা ম্যানিপুলেট করার সুযোগ প্রদান করে, তাই SQL কোড লেখার প্রয়োজন হয় না।
  3. সম্পর্ক ব্যবস্থাপনা:
    Doctrine ORM সহজেই বিভিন্ন ধরনের সম্পর্ক (OneToMany, ManyToOne, ManyToMany) পরিচালনা করতে পারে।
  4. ডাটাবেস নিরপেক্ষতা:
    Doctrine ডাটাবেস নিরপেক্ষ এবং আপনি যেকোনো ধরনের ডাটাবেস ব্যবহার করতে পারেন, যেমন MySQL, PostgreSQL, SQLite, ইত্যাদি।

সারাংশ

Doctrine ORM Symfony-তে ডাটাবেসের সাথে কাজ করার জন্য একটি শক্তিশালী টুল। এটি ডেটা পরিচালনা, মডেল তৈরি এবং ডাটাবেস সম্পর্কগুলি সহজে এবং কার্যকরভাবে করতে সাহায্য করে। Doctrine ORM ব্যবহার করলে ডেভেলপাররা PHP অবজেক্টের মাধ্যমে ডাটাবেসের সাথে কাজ করতে পারেন, যা তাদের কোডকে আরও পরিষ্কার এবং মডুলার করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...