Eine zentrale Neuerung für Datenbankanwendungen ist DB::usingWritePdo(). Die Methode führt eine Abfragekette innerhalb eines Callbacks über die Schreibverbindung aus und stellt die vorherige Einstellung danach wieder her, auch wenn eine Exception auftritt.
<?php
use Illuminate\Support\Facades\DB;
$posts = DB::usingWritePdo(
fn () => User::query()
->where('email', $email)
->first()
?->posts()
->whereNull('published_at')
->get()
);Damit lässt sich ein Fall absichern, bei dem das Modell zunächst über die Schreibverbindung geladen wird, eine nachfolgende Beziehungsabfrage aber auf eine Read Replica wechselt. Das ist etwa beim Laden eines Auftrags mit seinem aktuellen Status, eines Bestands nach einer Änderung oder von Berechtigungen nach einem Rollenwechsel relevant.
Die Middleware PreventStaleDatabaseReads behandelt veraltete Daten über mehrere Requests hinweg. Nach einer Schreiboperation auf der Standardverbindung speichert Laravel einen Zeitstempel in der Session. Für die folgenden zwei Sekunden laufen die Lesezugriffe dieses Benutzers über die Schreibverbindung. Für einzelne Routengruppen lässt sich mit PreventStaleDatabaseReads::for(10) ein Zeitraum von zehn Sekunden festlegen. Die Funktion benötigt eine Session, gilt nur für den Benutzer, der geschrieben hat, und ist daher keine allgemeine Lösung für zustandslose APIs. Bei einer einzigen Datenbankverbindung wird sie nicht benötigt.
Die Validierung erlaubt jetzt Float-Werte in der where-Bedingung von Rule::unique(). Eine Regel kann damit beispielsweise 19.99 neben einer SKU berücksichtigen, wenn die Kombination eindeutig sein muss. Die Änderung ersetzt keinen Datenbank-Constraint. Für dauerhaft eindeutige Spaltenkombinationen bleibt ein passender Index erforderlich.
Eloquent korrigiert die Verarbeitung von ofMany()-Aliasen in Closures sowie Aggregatabfragen mit selbstreferenzierenden One-of-many-Beziehungen. Betroffen sind Beziehungen, die anhand eines Kriteriums einen einzelnen Datensatz auswählen, etwa den jüngsten Preis oder den aktuellen Status. Anwendungen mit solchen Definitionen sollten vor dem Upgrade Regressionstests ergänzen.
Bei lazy() und lazyById() wird der vorherige Datenblock während der Verarbeitung früher freigegeben. Das senkt die gehaltene Speichermenge bei großen Exporten, Bestandsänderungen, historischen Verarbeitungen, Hintergrundjobs und Migrationen. Konstanter Speicherverbrauch ist trotzdem nicht garantiert, wenn der Anwendungscode jedes verarbeitete Modell sammelt.
Für Unique Jobs wird die Cache-Sperre nun entfernt, wenn das Dispatching eines geplanten Jobs fehlschlägt. Dadurch bleibt ein späterer Start nicht wegen einer veralteten Sperre blockiert. Das betrifft unter anderem geplante Berichte, externe Synchronisationen und Importe. Die Fehlerpfade sollten mit der eigenen Queue- und Cache-Konfiguration geprüft werden.
Weitere Korrektionen betreffen Float-Ergebnisse von collection mode(), Datumsvergleichsregeln mit Nicht-Datumswerten und SQLite-Schemaänderungen mit Foreign Keys oder in Anführungszeichen gesetzten Tabellennamen. Übersprungene eindeutige Broadcast-Jobs werden besser behandelt. Unerwartete Worker-Abstürze können bei aktivierten Queued Listeners, Mailables und Notifications als Exceptions gezählt werden. Laravel verbessert außerdem das Route-Caching, wenn Health-Routen auf einer Maschine erzeugt und auf einer anderen verwendet werden. Relation-Cloning und Datenbankabfragen erhalten weitere Korrektionen.
Für das Upgrade prüft php artisan --version die installierte Version. Mit composer show laravel/framework lässt sich die aktuelle Framework-Vorgabe kontrollieren, composer update laravel/framework aktualisiert das Paket. Abhängigkeiten mit gemeinsamer Versionsbindung sollten vorher geprüft werden. Danach folgt php artisan test. Besonders wichtig sind Tests für sofortige Lesezugriffe nach Schreiboperationen, Beziehungen nach Änderungen, APIs ohne Sessions, fehlgeschlagene geplante Jobs, große lazy()- und lazyById()-Verarbeitungen sowie ofMany()-Abfragen. Nach dem Staging-Deploy sollten Abfrageverhalten, Queue-Fehler und Logs überwacht werden. Als Referenzen dienen die offiziellen Laravel-Release-Notes, die Laravel-News-Übersicht und die Dokumentation für Laravel 13.x.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.