Skip to main content

Was ist der Query Builder

Der Query Builder von Laravel stellt eine flüssige Schnittstelle zum Aufbauen und Ausführen von Datenbankabfragen bereit. Sie starten mit der Methode table() der Fassade DB und kombinieren die Abfrage per Method-Chaining.
Intern werden PDO-Parameterbindings verwendet – SQL-Injection wird also automatisch verhindert.
Der Query Builder funktioniert auf allen von Laravel unterstützten Datenbanken (MySQL, MariaDB, PostgreSQL, SQLite, SQL Server). Der Code bleibt beim Wechsel der Datenbank unverändert.

Wann Query Builder, wann Eloquent

Daten abfragen

Alle Datensätze holen

get() liefert eine Illuminate\Support\Collection zurück. Jeder Datensatz ist ein PHP-stdClass-Objekt.

Einen Datensatz holen

Werte einer Spalte als Liste

Große Datenmengen in Blöcken verarbeiten

Wenn Sie während des Chunking Datensätze aktualisieren oder löschen, verwenden Sie statt chunk() immer chunkById(). Mit chunk() können Datensätze verschoben werden und übersprungen werden.

Streaming (LazyCollection)

Aggregate

Existenz prüfen

SELECT

WHERE

Grundlegende Bedingungen

Bedingungen gruppieren

whereIn / whereBetween / whereNull

whereLike (Musterabgleich)

whereAny / whereAll (gleiche Bedingung auf mehreren Spalten)

whereNullSafeEquals (NULL-sicherer Gleichheitsvergleich)

whereNullSafeEquals und orWhereNullSafeEquals behandeln zwei NULL-Werte als gleich. Beim gewöhnlichen =-Operator ist NULL = NULL false, whereNullSafeEquals betrachtet NULL und NULL als gleich. Es entspricht dem Operator <=> in MySQL und IS NOT DISTINCT FROM in PostgreSQL.
Ein normales where('column', null) wird zu WHERE column IS NULL; whereNullSafeEquals('column', $value) verhält sich hingegen konsistent, egal ob der gebundene Wert null ist oder nicht. Besonders praktisch, wenn Nutzereingaben null sein können.

JOIN

Subquery-JOIN

Sortieren, gruppieren, limitieren

Subqueries

Raw-Ausdrücke

Raw-Ausdrücke werden als SQL-String direkt eingebettet. Nutzerinput hier ungeprüft weiterzugeben, birgt SQL-Injection-Risiko. Verwenden Sie unbedingt Bindings.

INSERT / UPDATE / DELETE

INSERT

UPSERT (INSERT OR UPDATE)

UPDATE

DELETE

Bedingte Abfragen (when)

Für dynamische Bedingungen ist when() übersichtlicher.

Debugging

dd() ist zum Debuggen praktisch, sollte in Produktion aber niemals eingesetzt werden. Sicher ist der Blick auf SQL und Bindings über toSql() und getBindings().

Zusammenfassung

Der Query Builder ist eine niedrigere Ebene als Eloquent und gibt statt Model-Instanzen stdClass-Objekte zurück. Wenn Sie Beziehungen oder Modell-Events (Observer) nicht benötigen, ist der Query Builder einfacher und schneller.
Zuletzt geändert am 13. Juli 2026