Bei der Arbeit mit Datenbanken kommt es häufig vor, dass einige Felder leer oder NULL sind. Eine häufig auftretende Herausforderung besteht darin, Datensätze so zu sortieren, dass Zeilen mit leeren Feldern am Ende der Ergebnismenge angezeigt werden, während Zeilen mit nicht leeren Werten sinnvoll geordnet werden (z. B. in absteigender Reihenfolge). In diesem Beitrag zeige ich Ihnen anhand eines praktischen Beispiels, wie Sie dies in Laravel erreichen.
Angenommen, Sie haben eine Teilnehmertabelle für eine Aktivität und jeder Teilnehmer kann über einen Zeitstempel „attended_at“ verfügen, der aufzeichnet, wann der Teilnehmer an der Aktivität teilgenommen hat. Sie möchten alle Teilnehmer auflisten und sie so sortieren, dass:
Standardmäßig sortiert die Methode Latest() von Laravel Datensätze nach einer bestimmten Spalte in absteigender Reihenfolge. Der Fall, dass einige Datensätze NULL- oder leere Werte haben, wird jedoch nicht behandelt. Wenn Sie einfach Folgendes verwenden:
return $this ->participants() ->with('user') ->latest('attended_at') ->get();
Die Teilnehmer werden mit einem Zeitstempel sortiert, die NULL-Werte werden jedoch nicht nach unten verschoben.
Die gewünschte Sortierung können wir mit der Methode orderByRaw() erreichen. Dadurch können wir benutzerdefinierte Sortierlogik mithilfe von Roh-SQL-Ausdrücken schreiben. In diesem Fall sortieren wir danach, ob attend_at NULL ist, und sortieren dann nach attend_at in absteigender Reihenfolge für Nicht-NULL-Werte.
So können Sie diese Abfrage in Laravel schreiben:
return $this ->participants() ->with('user') ->orderByRaw('attended_at IS NULL, attended_at DESC') ->get() ->map(function (ActivityParticipant $participant) { return [ 'metric_number' => data_get($participant, 'user.student_id'), 'name' => data_get($participant, 'user.name'), 'status' => data_get($participant, 'status'), 'attended_at' => data_get($participant, 'attended_at', '-'), ]; })->toArray();
Die Funktion „map()“ wird dann verwendet, um die Ausgabe in der gewünschten Struktur zu formatieren, einschließlich Feldern wie „student_id“, „name“ und „status“, und um den Zeitstempel „attent_at“ in ein für Menschen lesbares Format oder „-“ zu konvertieren, falls vorhanden leer.
Das Sortieren mit NULL- oder leeren Werten in Laravel ist eine häufige Aufgabe bei der Arbeit mit Daten, die möglicherweise nicht immer vollständig sind. Durch die Verwendung der orderByRaw()-Methode mit einem SQL-Ausdruck wie attend_at IS NULL, attend_at DESC können Sie ganz einfach sicherstellen, dass Zeilen mit NULL-Werten unten angezeigt werden, während der Rest der Daten dennoch sinnvoll sortiert wird.
Diese Methode ist besonders nützlich in Szenarien, in denen es um die Anwesenheit geht, wie in diesem Beispiel gezeigt, sie kann jedoch auch auf viele andere Situationen angewendet werden, in denen möglicherweise einige Datenfelder fehlen. Mit diesem Ansatz können Sie Ihren Benutzern eine klarere und intuitivere Anzeige der Datensätze in Ihrer Anwendung bieten.
Viel Spaß beim Codieren!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3