Laravel Eloquent: Hilfsfunktion zum Datenbank-Debugging

Referenzen
Blog Bild

Laravel Eloquent: Hilfsfunktion zum Datenbank-Debugging

Bei der Arbeit mit Laravel Eloquent, können Datenbankabfragen sehr komplex werden und Fehler schleichen sich schnell ein. Diese zu finden, stellt sich oft als kompliziert heraus. Gerade wenn man im Eifer des Gefechts, einen Code kopiert, aber diesen nicht vollständig angepasst hat, man vergessen hat einen Variablen-Namen abzuändern oder man bestehende Software-Projekte ohne Kontrolle übernimmt. Die tatsächliche Datenbank Abfrage kann hier schnell weiterhelfen.

Beispiel:
Die Schedule Tabelle beinhaltet ein gewachsenes Konstrukt, der User erhält den Primary-Key der Benutzer Tabelle. In diesem Fall eine numerische ID:

Ein Code wie dieser, resultiert dann in SQL Abfragen wie folgt:

Vorbereitung:

Um zu Starten, benötigen wir die HelperServiceProvider App (app/Providers/HelperServiceProvider.php). In dieser Datei werden die “Helper” (Hilfsfunktionen) registriert. Der HelperServiceProvider liest alle Dateien im Ordner “app/Helpers” und bindet diese automatisch ein.

Der HelperServiceProvider muss im Anschluss noch in der App registriert werden. Dazu ergänzt man in der Datei config/app.php, im Abschnitt “providers”, den neu erstellten HelperSeviceProvider:

Damit stehen diese Funktionen überall in Laravel zur Verfügung, u.a auch in der Laravel Kommandozeile artisan tinker.

Funktionen:

Jetzt folgt die eigentliche Hilfsfunktion zum Debuggen von Datenbanken. Hier sieht man einen Code Snippet, welcher die Funktionen “ddsql()” und “dumpsql()” bereitstellt:

Wie man in der dritten Zeile sieht, verwenden wir für die Hilfsfunktion, den Builder von Eloquent: (https://laravel.com/docs/8.x/eloquent). Daten die fälschlicherweise eingegeben wurden, erhalten somit eine Fehlermeldung. ddsql($query->get())

Nachdem man die oben genannte Datei vervollständigt hat, kann man die Funktion “ddsql()” in seinem Code verwenden. Hier ein Beispiel der Funktion im Einsatz (hierzu wurde ein block Code von der Seite https://laravel.com/docs/8.x/eloquent#advanced-subqueries verwendet):

Dieser Code führt dann folgendes aus: “Route/Command/etc. Dadurch kann man sich bei API, Endpunkte in den Entwicklertools der Webbrowser, über die Datenbankabfrage als SQL ausgeben lassen. Somit kann man besser nachvollziehen ob und wo ein Fehler vorliegt.
Das SQL kann dann in dem User Datenbank Editor ausgeführt bzw. gedebuggt werden.

Dieses Vorgehen bietet einen guten Einstiegspunkt, um an der Performance Schraube zu drehen.

Share on facebook
Teilen
Share on twitter
Twittern
Share on google
Teilen
Share on linkedin
Mitteilen
Share on pinterest
Pinnen
Share on xing
teilen

IMMER AUF DEM LAUFENDEN BLEIBEN

Melde dich jetzt zu unseren Newsletter an!

Mit deiner Anmeldung erklärst Du dich mit unserem Datenschutz und AGB einverstanden.