Doctrine ORM क्या है और इसकी आवश्यकता क्यों है?
Doctrine ORM (Object-Relational Mapping) PHP के लिए एक शक्तिशाली लाइब्रेरी है, जो डेवलपर्स को SQL क्वेरी लिखने के बजाय ऑब्जेक्ट-ओरिएंटेड तरीके से डेटाबेस के साथ काम करने की सुविधा देती है। Doctrine ORM Symfony का डी-फैक्टो स्टैंडर्ड है, लेकिन इसे किसी भी PHP प्रोजेक्ट (Laravel, Yii, या सीधे PHP) में इस्तेमाल किया जा सकता है।
Doctrine जिस मुख्य समस्या को हल करता है: रिलेशनल डेटा मॉडल (टेबल, रो, कॉलम) और ऑब्जेक्ट मॉडल (क्लास, ऑब्जेक्ट, प्रॉपर्टी) के बीच का अंतर। Doctrine स्वचालित रूप से PHP ऑब्जेक्ट्स को डेटाबेस रिकॉर्ड्स में और वापस बदल देता है।
मुख्य विशेषताएं:
- स्वचालित DB स्कीमा निर्माण — क्लास में एनोटेशन/एट्रीब्यूट के आधार पर
- Repository Pattern — डेटा खोजने और फ़िल्टर करने के लिए आसान तरीके
- DQL (Doctrine Query Language) — ऑब्जेक्ट-ओरिएंटेड क्वेरी भाषा
- Lazy Loading — ज़रूरत पड़ने पर ही संबंधित डेटा लोड करना
- माइग्रेशन — DB स्कीमा में बदलाव प्रबंधित करना
- ट्रांज़ैक्शन — ACID का पूर्ण समर्थन
- कैशिंग — मेटाडेटा, क्वेरी और परिणामों का कैश
Doctrine ORM छोटी वेबसाइटों से लेकर सैकड़ों टेबल वाले कॉर्पोरेट सिस्टम तक, किसी भी पैमाने के प्रोजेक्ट के लिए उपयुक्त है।
Doctrine ORM की स्थापना (Installation)
इंस्टॉलेशन Composer (PHP पैकेज मैनेजर) के माध्यम से किया जाता है। अपने प्रोजेक्ट की रूट डायरेक्टरी में टर्मिनल खोलें और यह कमांड चलाएं:
composer require doctrine/orm
Symfony के साथ काम करने के लिए DoctrineBundle पैकेज इंस्टॉल करने की सलाह दी जाती है:
composer require symfony/orm-pack
composer require --dev symfony/maker-bundle # कोड जनरेशन के लिए
अगर आप बिना फ्रेमवर्क के सीधे PHP का उपयोग कर रहे हैं, तो अपने DB के लिए ड्राइवर भी इंस्टॉल करना होगा:
composer require doctrine/dbal
composer require doctrine/annotations # PHP 7.4 और उससे नीचे के लिए एनोटेशन
PHP 8+ एट्रीब्यूट के साथ काम करने के लिए (अनुशंसित तरीका): एनोटेशन की ज़रूरत नहीं, Doctrine नेटिव एट्रीब्यूट को सपोर्ट करता है।
त्वरित शुरुआत: कोड उदाहरण
आइए एक सरल उदाहरण देखें — "Product" नामक एंटिटी बनाना और उसे डेटाबेस में सेव करना।
1. एंटिटी क्लास बनाएं
<?php
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Table(name: 'products')]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string', length: 255)]
private string $name;
#[ORM\Column(type: 'float')]
private float $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. ऑब्जेक्ट बनाएं और सेव करें
<?php
// Symfony कंट्रोलर में या कहीं और
use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;
class ProductController
{
public function createProduct(EntityManagerInterface $entityManager)
{
$product = new Product();
$product->setName('लैपटॉप');
$product->setPrice(49999.99);
// Doctrine को बताएं कि ऑब्जेक्ट को सेव करना है
$entityManager->persist($product);
// डेटाबेस में INSERT करें
$entityManager->flush();
// अब $product->getId() में नए रिकॉर्ड का ID होगा
return