Doctrine ORM für PHP: Komplettguide mit Praxisbeispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Doctrine ORM und warum braucht man es?

Doctrine ORM (Object-Relational Mapping) ist eine leistungsstarke Bibliothek für PHP, die Entwicklern ermöglicht, mit Datenbanken objektorientiert zu arbeiten, anstatt rohe SQL-Abfragen zu schreiben. Doctrine ORM ist der De-facto-Standard für Symfony, kann aber auch in jedem anderen PHP-Projekt (Laravel, Yii, reines PHP) eingesetzt werden.

Das Hauptproblem, das Doctrine löst: die Diskrepanz zwischen dem relationalen Datenmodell (Tabellen, Zeilen, Spalten) und dem objektorientierten Modell (Klassen, Objekte, Eigenschaften). Doctrine wandelt PHP-Objekte automatisch in Datenbankeinträge um und umgekehrt.

Schlüsselfunktionen:

  • Automatische Schemaerstellung – basierend auf Annotationen/Attributen in den Klassen
  • Repository Pattern – komfortable Methoden zum Suchen und Filtern von Daten
  • DQL (Doctrine Query Language) – eine objektorientierte Abfragesprache
  • Lazy Loading – verknüpfte Daten werden nur bei Bedarf geladen
  • Migrationen – Verwaltung von Schemaänderungen der Datenbank
  • Transaktionen – vollständige ACID-Unterstützung
  • Caching – von Metadaten, Abfragen und Ergebnissen

Doctrine ORM eignet sich für Projekte jeder Größe: von kleinen Webseiten bis hin zu Unternehmenssystemen mit Hunderten von Tabellen.

Installation von Doctrine ORM

Die Installation erfolgt über Composer (den PHP-Paketmanager). Öffnen Sie ein Terminal im Stammverzeichnis Ihres Projekts und führen Sie Folgendes aus:

composer require doctrine/orm

Für die Arbeit mit Symfony empfiehlt sich die Installation des DoctrineBundle-Pakets:

composer require symfony/orm-pack
composer require --dev symfony/maker-bundle  # zum Generieren von Code

Wenn Sie reines PHP ohne Framework verwenden, müssen Sie zusätzlich den Treiber für Ihre Datenbank installieren:

composer require doctrine/dbal
composer require doctrine/annotations  # für die Arbeit mit Annotationen (PHP 7.4 und älter)

Für die Arbeit mit PHP 8+ Attributen (empfohlene Methode): Annotationen sind nicht erforderlich, Doctrine unterstützt native Attribute.

Schnellstart: Codebeispiel

Betrachten wir ein einfaches Beispiel – die Erstellung einer Entität "Product" und das Speichern in der Datenbank.

1. Erstellen der Entitätsklasse (Entity)

<?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;

    // Getter und Setter
    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. Objekt erstellen und speichern

<?php
// In einem Symfony-Controller oder an einer beliebigen anderen Stelle
use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;

class ProductController
{
    public function createProduct(EntityManagerInterface $entityManager)
    {
        $product = new Product();
        $product->setName('Laptop');
        $product->setPrice(49999.99);

        // Doctrine mitteilen, dass das Objekt gespeichert werden soll
        $entityManager->persist($product);
        
        // INSERT in die Datenbank ausführen
        $entityManager->flush();

        // Jetzt enthält $product->getId() die ID des neuen Eintrags
        return                    

Empfehlungen