ORM für PHP: Vergleich von Doctrine, Eloquent und Cycle – Codebeispiele

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

ORM für PHP: Vergleich und Beispiele



ORM (Object-Relational Mapping) ist eine Zwischenschicht zwischen PHP-Code und einer relationalen Datenbank. Es verwandelt Tabellenzeilen in Objekte und SQL-Abfragen in Methoden. Für PHP gibt es mehrere ausgereifte ORM-Lösungen. In diesem Artikel betrachten wir die drei beliebtesten: Doctrine, Eloquent (aus Laravel) und Cycle. Sie erfahren deren Philosophie, Syntax und erhalten fertige Codebeispiele.



1. Doctrine ORM – Data Mapper



Doctrine ist das leistungsstärkste und ausgereifteste ORM für PHP. Es verwendet das Data Mapper-Muster: Entitäten (Entity) wissen nichts von der Datenbank, die gesamte Datenbankarbeit wird über Repositories und den Entity-Manager EntityManager ausgeführt.



// Beispiel einer Entität in Doctrineuse Doctrine\\ORM\\Mapping as ORM;

/** * @ORM\\Entity * @ORM\\Table(name="users") */class User{ /** @ORM\\Id @ORM\\Column(type="integer") @ORM\\GeneratedValue */ private int $id;

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

public function getName(): string { return $this->name; }

public function setName(string $name): void { $this->name = $name; }}

// Speichern und Abrufen$user = new User();$user->setName('Alexei');$entityManager->persist($user);$entityManager->flush();

$users = $entityManager->getRepository(User::class)->findAll();


2. Eloquent ORM – Active Record



Eloquent ist das ORM aus dem Laravel-Framework. Es verwendet das Active Record-Muster: Jedes Objekt weiß selbst, wie es sich in der Datenbank speichert. Der Code ist kompakt und intuitiv, ideal für schnelle Entwicklung.



// Eloquent-Modelluse Illuminate\\Database\\Eloquent\\Model;

class User extends Model{ protected $table = 'users'; protected $fillable = ['name'];}

// Datensatz erstellen$user = User::create(['name' => 'Maria']);

// Lesen$users = User::where('name', 'like', '%Ma%')->get();

foreach ($users as $user) { echo $user->name;}

// Aktualisieren$user = User::find(1);$user->name = 'Olga';$user->save();


3. Cycle ORM – hybrider Ansatz



Cycle ist ein modernes ORM von den Autoren des Spiral-Frameworks. Es kombiniert die besten Eigenschaften von Data Mapper und Active Record. Es arbeitet schneller als Doctrine dank Schema-Caching und ohne Magie. Unterstützt strenge Typisierung.



// Cycle-Entitätuse Cycle\\Annotated\\Annotation as Cycle;

/** * @Cycle\\Entity * @Cycle\\Table(name="users") */class User{ /** @Cycle\\Column(type="primary") */ public int $id;

/** @Cycle\\Column(type="string") */ public string $name;}

// Speichern$user = new User();$user->name = 'Ivan';$orm->persist($user);$orm->run();

// Suchen$users = $orm->getRepository(User::class)->select()->fetchAll();


Vergleich der ORMs für PHP



Eigenschaft Doctrine Eloquent Cycle
Muster Data Mapper Active Record Hybrid
Leistung Mittel Hoch (mit Cache) Hoch
Framework-Bindung Unabhängig Laravel Spiral / unabhängig
Migrationsgenerierung Integriert Über Artisan

Empfehlungen