Laravel Eloquent:
Unser byte5-Neuzugang Marlon zeigte den Teilnehmenden des 14. Laravel Meetup Germany einige Tricks und Kniffe, um das Arbeiten in Datenbanken mit Laravel Eloquent zu erleichtern. Die folgenden Codebeispiele verdeutlichen, wie einfach Programme mit Eloquent optimiert werden können. Besonders häufig kommen dabei where-Funktionen zum Einsatz.
Mit Eager Loading lässt sich das Laden von Daten deutlich effizienter gestalten als bei der Verwendung von Lazy Loading.
© byte5
Eager Load vs. Lazy Load
Mit diesem Code sollen alle Posts aus einer Datenbank abgerufen und der jeweilige Titel sowie Autorenname ausgegeben werden. Dabei werden mit all alle Posts abgerufen und das User Model (Autor) des Posts in jedem foreach-Zyklus erneut geladen. Das führt zu unnötig vielen Datenbankabfragen. Eine schnellere Alternative stellt die Verwendung von with dar. Dabei werden ebenfalls alle Posts abgerufen, allerdings die User Models (Autoren) nur einmal und mit nur einer Datenbank-Abfrage geladen.
Datenbank-Abfragen und Models die mit Lazy Loading erzeugt werden:
Datenbankabfrage mit Lazy-Loading
Datenbank-Abfragen und Models, die mit Eager Loading erzeugt werden:
© byte5
Datenbankabfrage mit Eager-Loading
Das folgende Beispiel zeigt, wie ein einzelner Post in einer Datenbank anhand eines Slugs gefunden werden kann.
where-Abfrage mit Slugs
In einer herkömmlichen where-Abfrage beschreibt der erste Parameter die Datenbankspalte, in der gesucht werden soll. Parameter zwei definiert den Inhalt, nach dem gesucht wird. Das Ganze lässt sich allerdings durch die Verwendung von Slug verkürzen: Dabei generiert Laravel automatisch neue where-Funktionen für die angelegten Datenbankspalten.
Produktabfrage mit where
Ziel dieses Beispiels ist es, alle aktiven Produkte aus der Datenbank abzurufen, deren Preis 250 oder weniger beträgt. Eine herkömmliche where-Abfrage ruft dabei die Produkte ab. Was grundsätzlich gut funktioniert, kann allerdings schnell unübersichtlich werden, sobald dieselbe Abfrage in mehreren Dateien durchgeführt wird. Möchten man zu einem späteren Zeitpunkt den Preis ändern, muss dies manuell in jeder Datei abgeändert werden. Etwas einfacher kann diese Abfrage mithilfe von Scopes gestaltet werden. Um die where-Abfrage an einer zentralen Stelle bearbeiten zu können, müssen die Scopes in dem Products Model hinzugefügt werden. Dabei ist zu beachten, dass die Namen der Scope-Funktionen immer mit „scope“ beginnen.
© byte5
Produktabfrage mit scopes
© byte5
Abfrage aller Datenbankeinträge vom Mai 2021
Dieses Beispiel zielt darauf ab, 50 Posts aus der Datenbank zu laden, die im Mai 2021 erstellt wurden, und diese auszugeben. Bei einer herkömmlichen Abfrage werden die Posts aus der Datenbank geladen und das Erstellungsdatum mit zwei where-Abfragen eingegrenzt. Das kann schnell unübersichtlich werden. Auch schleichen sich hier leicht Logikfehler ein. Eine lesbarere und fehlerärmere Alternative stellt dieselbe Abfrage mit whereMonth und whereYear dar. Bei diesen beiden Funktionen können die Ergebnisse einfach durch Angabe von Monat bzw. Jahr eingegrenzt werden.
Mithilfe dieser einfach anzuwendenden Beispiele ist es möglich, Programme in Eloquent effizienter und fehleranfälliger zu gestalten.
Wie bereits im vergangenen Meetup angekündigt, möchten wir mittelfristig die Laravel-Community im deutschsprachigen Raum zusammenzuführen. Daher wird es ab diesem Sommer keine Laravel Meetups Germany mehr geben. Stattdessen werden wir als Laravel DACH zukünftig die bisherigen Regionalgruppen bündeln. Das bedeutet für euch: vielfältige Themen, hohe Qualität und eine kontinuierliche Weiterentwicklung der Community in Deutschland, Österreich und der Schweiz.
Aber keine Angst, auf die allseits beliebten Vorort-Treffen in unserem Konfi mit Pizza und Bier müsst ihr in Zukunft nicht verzichten. Sobald es die aktuellen Entwicklungen wieder zulassen, werden wir zu einem Hybrid-Modell übergehen: Wir planen eine Kombination aus Talks vor Ort in Frankfurt und zugeschalteten Speaker:innen von anderen Standorten. Damit bleibt auch der persönliche Austausch in der Rhein-Main-Community weiterhin erhalten.
Das nächste Laravel Meetup zum Thema Best Practices findet am 08. Juli von 18:30 bis 20:00 Uhr statt.
Habt ihr Fragen an unsere Laravel-Expert:innen, Themenvorschläge für Talks oder möchtet selbst einmal als Speaker:in an einem Meetup teilnehmen? Wir freuen uns auf eure Nachricht an laravel@byte5.de
Komm zum
Laravel Meetup DACH!
Jetzt kostenlos anmelden