Doctrine ORM PHP: पूरी गाइड उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Doctrine ORM PHP: पूरी गाइड उदाहरणों के साथ

1. यह क्या है और क्यों ज़रूरी है?

Doctrine ORM (Object-Relational Mapper) PHP के लिए एक शक्तिशाली लाइब्रेरी है जो Data Mapper पैटर्न को लागू करती है। Active Record (जैसे Laravel Eloquent) के विपरीत, Doctrine बिज़नेस लॉजिक (Entities) को डेटाबेस लॉजिक से पूरी तरह अलग रखता है। Entities सामान्य PHP ऑब्जेक्ट (Plain Old PHP Objects - POPO) होते हैं जिन्हें डेटाबेस के बारे में कुछ पता नहीं होता। डेटाबेस से सारा काम एक केंद्रीय रिपॉजिटरी EntityManager के ज़रिए होता है।

इसकी ज़रूरत क्यों है? Doctrine ऑब्जेक्ट-ओरिएंटेड डेटा मॉडल और रिलेशनल डेटाबेस मॉडल के बीच की बुनियादी असमानता (Object-Relational Impedance Mismatch) को हल करता है। आप ऑब्जेक्ट और कलेक्शन के साथ काम करते हैं, और Doctrine आपकी कार्रवाइयों को अपने आप SQL क्वेरी में बदल देता है। इससे खासकर बड़े enterprise प्रोजेक्ट्स में ज़्यादा साफ, टेस्ट करने योग्य और मेंटेन करने योग्य कोड लिखना संभव होता है।

मुख्य फायदे: SQL पर पूरा नियंत्रण (DQL - Doctrine Query Language के ज़रिए), लेज़ी लोडिंग (Lazy Loading), लचीली इवेंट सिस्टम (Lifecycle Events), इनहेरिटेंस सपोर्ट (Mapped Superclass, Single Table Inheritance, Joined Table Inheritance), बिल्ट-इन Query Builder और हाइड्रेटर (Hydration Modes)। Doctrine जटिल PHP एप्लिकेशन (Symfony, Drupal, Magento) के लिए डी-फैक्टो स्टैंडर्ड है।

2. इंस्टॉलेशन

इंस्टॉलेशन Composer (PHP के लिए pip जैसा) के ज़रिए किया जाता है। बेसिक उपयोग के लिए दो पैकेज काफी हैं:

composer require doctrine/orm
composer require doctrine/dbal
composer require symfony/cache  # मेटाडेटा कैशिंग के लिए अनुशंसित

एनोटेशन (पुराना लेकिन लोकप्रिय तरीका) के लिए एक अतिरिक्त पैकेज चाहिए:

composer require doctrine/annotations

YAML या XML कॉन्फ़िगरेशन के लिए:

composer require symfony/yaml  # YAML के लिए

इंस्टॉलेशन के बाद सुनिश्चित करें कि आपके प्रोजेक्ट में Composer ऑटोलोडर जुड़ा है:

require_once __DIR__ . '/vendor/autoload.php';

3. त्वरित शुरुआत — न्यूनतम काम करने वाला उदाहरण

चलिए एक सरल User एंटिटी बनाते हैं और इसे SQLite डेटाबेस में सेव करते हैं।

चरण 1: EntityManager कॉन्फ़िगरेशन (bootstrap.php)

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\ORMSetup;
use Doctrine\DBAL\DriverManager;

require_once __DIR__ . '/vendor/autoload.php';

// एंटिटी पथ और डेवलपमेंट मोड सेट करें
$paths = [__DIR__ . '/src/Entity'];
$isDevMode = true;

// ORM कॉन्फ़िगरेशन बनाएं
$config = ORMSetup::createAttributeMetadataConfiguration($paths, $isDevMode);

// डेटाबेस कनेक्शन सेट करें (SQLite)
$connectionParams = [
    'driver' => 'pdo_sqlite',
    'path' => __DIR__ . '/data/database.sqlite',
];

$connection = DriverManager::getConnection($connectionParams, $config);

// EntityManager बनाएं
$entityManager = new EntityManager($connection, $config);

चरण 2: एंटिटी बनाना (src/Entity/User.php)

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Table(name: 'users')]
class User
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private int|null $id = null;

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

    #[ORM\Column(type: 'string', length: 255, unique: true)]
    private string $email;

    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 getEmail(): string
    {
        return $this->email;
    }

    public function setEmail(string $email): self                    

अनुशंसाएँ