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 |
Auch in der Bibliothek
ORM für C++: Vergleich und Anwendungsbeispiele (ODB, SOCI, SQLiteCpp)
Arbeiten mit Bildern in C++: Die Bibliotheken CImg und STB Image
Geolokalisierung und Karten in C++: Überblick über Bibliotheken und Werkzeuge
Async/Await für Swift: Das komplette Leitfaden mit Beispielen
Empfehlungen |