Repository ক্লাস এবং ডেটাবেজ কোয়েরি

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

304

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


Repository ক্লাস কী?

Repository ক্লাস হল একটি বিশেষ ক্লাস যা Doctrine ORM এর মাধ্যমে ডেটাবেসে Entity এর সাথে সম্পর্কিত কোয়েরি পরিচালনা করে। এটি মূলত ডেটাবেস থেকে ডেটা আনতে, আপডেট করতে, মুছতে এবং ইনসার্ট করার কাজ করে। Symfony-তে Repository ক্লাস src/Repository/ ডিরেক্টরিতে তৈরি করা হয় এবং এটি Entity ক্লাসের সাথে সম্পর্কিত থাকে।


Doctrine Repository ক্লাস তৈরি করা

Symfony-তে Repository ক্লাস তৈরি করতে, প্রথমে একটি Entity ক্লাস তৈরি করতে হয় এবং তারপর সেই Entity ক্লাসের জন্য Repository ক্লাস তৈরি করা হয়।

1. Entity ক্লাস তৈরি করা

ধরা যাক, আমরা একটি Product Entity তৈরি করছি যা ডেটাবেসে পণ্য সম্পর্কিত তথ্য সংরক্ষণ করবে।

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $name;

    /**
     * @ORM\Column(type="decimal", scale=2)
     */
    private $price;

    // Getter and Setter methods
    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;
    }
}

এখানে Product Entity ক্লাসের জন্য repositoryClass হিসেবে App\Repository\ProductRepository ব্যবহার করা হয়েছে।


2. Repository ক্লাস তৈরি করা

প্রতিটি Entity-র জন্য একটি Repository ক্লাস তৈরি করা হয় যা ডেটাবেসের সাথে যোগাযোগের জন্য Doctrine-কে নির্দেশ দেয়। Symfony-এর CLI কমান্ড দিয়ে Repository ক্লাস তৈরি করা সহজ:

php bin/console make:repository ProductRepository

এটি src/Repository/ProductRepository.php ফাইলটি তৈরি করবে।

namespace App\Repository;

use App\Entity\Product;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @method Product|null find($id, $lockMode = null, $lockVersion = null)
 * @method Product|null findOneBy(array $criteria, array $orderBy = null)
 * @method Product[]    findAll()
 * @method Product[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class ProductRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Product::class);
    }

    // আপনি নিজস্ব কাস্টম কোয়েরি মেথড এখানে যোগ করতে পারেন
}

ProductRepository ক্লাসটি ServiceEntityRepository থেকে বংশধর, যা Doctrine-এর Entity ম্যানেজমেন্ট এবং ডেটাবেস অপারেশনগুলির জন্য একটি শক্তিশালী বেস ক্লাস।


Repository ক্লাসে কাস্টম কোয়েরি তৈরি করা

Doctrine Query Builder এবং DQL (Doctrine Query Language) ব্যবহার করে Repository ক্লাসে কাস্টম কোয়েরি তৈরি করা যায়।

1. Doctrine Query Builder ব্যবহার করা

Doctrine Query Builder ব্যবহার করে আপনি ডেটাবেস থেকে ডেটা সহজেই সংগ্রহ করতে পারেন।

namespace App\Repository;

use App\Entity\Product;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\QueryBuilder;

class ProductRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Product::class);
    }

    // একটি কাস্টম কোয়েরি যেটি পণ্য অনুসারে ডেটা ফেরত দেয়
    public function findByPriceRange(float $minPrice, float $maxPrice)
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.price >= :minPrice')
            ->andWhere('p.price <= :maxPrice')
            ->setParameter('minPrice', $minPrice)
            ->setParameter('maxPrice', $maxPrice)
            ->getQuery()
            ->getResult();
    }
}

এখানে findByPriceRange মেথডটি Doctrine Query Builder ব্যবহার করে পণ্যের মূল্য সীমার মধ্যে ডেটা খুঁজে বের করছে।

2. DQL (Doctrine Query Language) ব্যবহার করা

DQL ব্যবহার করে আপনি আরও জটিল কোয়েরি করতে পারেন। এটি SQL-এর মত, তবে এটি Doctrine ORM-এ ব্যবহৃত Entity ক্লাসের উপর কাজ করে।

public function findProductsByCategory(string $category)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT p FROM App\Entity\Product p WHERE p.category = :category'
        )
        ->setParameter('category', $category)
        ->getResult();
}

এখানে DQL ব্যবহার করা হয়েছে, যা App\Entity\Product Entity থেকে পণ্য সংগ্রহ করছে যেখানে category নির্দিষ্ট মানের সমান।


Repository থেকে ডেটা রিটার্ন করা

Repository ক্লাসের মাধ্যমে ডেটা রিটার্ন করা হয়:

ডেটা রিটার্ন উদাহরণ

$products = $productRepository->findAll(); // সব পণ্য
$filteredProducts = $productRepository->findByPriceRange(50, 200); // মূল্য সীমার মধ্যে পণ্য

এই কোডটি ProductRepository থেকে ডেটা সংগ্রহ করে এবং findAll অথবা findByPriceRange মেথড ব্যবহার করে ফলাফল রিটার্ন করে।


কাস্টম কোয়েরি বা SQL ব্যবহার

যদি আপনি আরো জটিল SQL কোয়েরি ব্যবহার করতে চান, তবে Doctrine Native SQL ব্যবহার করতে পারেন:

public function findProductByNameUsingNativeSQL(string $name)
{
    $conn = $this->getEntityManager()->getConnection();
    $sql = 'SELECT * FROM product WHERE name = :name';
    $stmt = $conn->prepare($sql);
    $stmt->execute(['name' => $name]);

    return $stmt->fetchAllAssociative();
}

এখানে Native SQL ব্যবহৃত হয়েছে এবং পণ্য নাম অনুসারে SQL কোয়েরি করা হয়েছে।


সারাংশ

  • Repository ক্লাস Symfony এবং Doctrine ORM-এ ডেটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত হয়।
  • এটি DQL, Query Builder, এবং Native SQL ব্যবহার করে ডেটাবেসের উপর কাস্টম কোয়েরি তৈরি করতে সক্ষম।
  • Symfony-তে Entity এবং Repository-এর সংযোগ ডেটাবেসের জন্য কার্যকরী এবং সহজলভ্য ডেটা পরিচালনার সুবিধা দেয়।

Doctrine এবং Symfony Repository ক্লাস একত্রে ডেটাবেস অপারেশনগুলিকে মডুলার এবং সহজ করে তোলে, যা ডেভেলপারদের কাজকে অনেক সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...