Ein ORM ist eine Technik, die Tabellen einer relationalen Datenbank als Objekte im Programmcode abbildet. Statt SQL zu schreiben, arbeitest du mit Klassen und Methoden, und das ORM übersetzt das in Datenbankabfragen.
- ORM
Eine Schicht zwischen Programm und Datenbank, die Datensätze als Objekte darstellt und Abfragen selbst in SQL übersetzt.
Beispiel: „Mit dem ORM von Laravel holst du alle offenen Bestellungen mit einer Zeile, ohne SQL zu schreiben.“Auch: Object-Relational Mapping, auf Deutsch objektrelationale Abbildung.
Verwandt: SQL, die Sprache, in die ein ORM seine Abfragen übersetzt.
Wie ein ORM arbeitet
Jede Tabelle bekommt eine Klasse, jede Zeile wird zu einem Objekt dieser Klasse, und jede Spalte zu einer Eigenschaft. Beziehungen zwischen Tabellen werden zu Methoden: Eine Bestellung kennt ihren Kunden, ein Kunde seine Bestellungen.
$offen = Bestellung::where('status', 'offen')
->with('kunde')
->get();Bekannte ORMs sind Eloquent in Laravel, Doctrine in Symfony, das ORM von Django, Hibernate in Java und Prisma in TypeScript.
Was ein ORM bringt
Lesbaren Code und Schutz vor SQL-Injection, weil Werte nie direkt in die Abfrage geschrieben werden. Dazu kommen Migrationen, die Änderungen an der Datenbankstruktur als Code festhalten, sodass jede Umgebung denselben Stand hat.
Und weil das ORM die Unterschiede zwischen den Datenbanken ausgleicht, läuft derselbe Code mit MySQL, PostgreSQL oder SQLite.
Wo ein ORM Fallen stellt
Beim N+1-Problem. Wer hundert Bestellungen lädt und für jede den Kunden einzeln abfragt, schickt hunderteins Abfragen an die Datenbank. Die Seite wird langsam, obwohl der Code harmlos aussieht.
Die Lösung ist, Beziehungen vorab mitzuladen, im Beispiel oben über with. Bei sehr komplexen Auswertungen ist handgeschriebenes SQL trotzdem oft die bessere Wahl.