Heim Backend-Entwicklung PHP-Tutorial Sortieren von Zeilen mit leeren Werten unten und nicht leeren Werten in absteigender Reihenfolge in Laravel

Sortieren von Zeilen mit leeren Werten unten und nicht leeren Werten in absteigender Reihenfolge in Laravel

Sep 07, 2024 am 08:31 AM

Sorting Rows with Empty Values at the Bottom and Non-Empty Values in Descending Order in Laravel

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.

Szenario

Angenommen, Sie haben eine Teilnehmertabelle für eine Aktivität und jeder Teilnehmer verfügt möglicherweise über einen Zeitstempel „attended_at“, der aufzeichnet, wann der Teilnehmer an der Aktivität teilgenommen hat. Sie möchten alle Teilnehmer auflisten und sie so sortieren, dass:

  • Teilnehmer, die teilgenommen haben (d. h. attend_at ist nicht leer), werden zuerst angezeigt, sortiert nach der letzten Anwesenheit.
  • Teilnehmer, die nicht teilgenommen haben (d. h. attend_at ist leer oder NULL), erscheinen zuletzt.

Das Problem

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 Lösung: Mit orderByRaw

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();

Aufschlüsselung der Abfrage

  • orderByRaw('attended_at IS NULL, attend_at DESC'):
    • attend_at IS NULL: Dies gibt true (oder 1) für Zeilen zurück, in denen attend_at NULL ist, andernfalls false (oder 0). Dadurch werden NULL-Werte ganz unten platziert.
    • attend_at DESC: Nach der Verarbeitung der NULL-Werte werden die verbleibenden Zeilen mit nicht leeren attend_at-Werten in absteigender Reihenfolge sortiert, was bedeutet, dass die letzte Anwesenheit zuerst angezeigt wird.

Endgültige Ausgabe

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.

Vorteile dieses Ansatzes

  • Leistung: Dieser Ansatz nutzt die Sortierfunktionen von SQL und macht ihn so für große Datenmengen effizient.
  • Lesbarkeit: Durch die Verwendung von orderByRaw() mit einem unformatierten SQL-Ausdruck bleibt der Code prägnant und leicht verständlich.
  • Flexibilität: Sie können diese Logik problemlos erweitern, um nach anderen Feldern zu sortieren oder komplexere Bedingungen einzubeziehen.

Abschluss

Das Sortieren mit NULL- oder leeren Werten in Laravel ist eine häufige Aufgabe, wenn mit Daten gearbeitet wird, 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 ermöglichen.

Viel Spaß beim Codieren!

Das obige ist der detaillierte Inhalt vonSortieren von Zeilen mit leeren Werten unten und nicht leeren Werten in absteigender Reihenfolge in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie überprüfen Sie, ob eine E -Mail -Adresse in PHP gültig ist? Wie überprüfen Sie, ob eine E -Mail -Adresse in PHP gültig ist? Sep 21, 2025 am 04:07 AM

UseFilter_var () tovalateMailSyntaxandCheckdnsrr () tuverifyDomainMxRecords.Example: $ EMAMME = "User@example.com"; if (f ilter_var ($ mail, filter_validate_email) && checkDnsrr (explode ('@', $ mail) [1], 'mx') {echo "validandDeliverableMail & qu

Wie erstelle ich eine tiefe Kopie oder Klon eines Objekts in PHP? Wie erstelle ich eine tiefe Kopie oder Klon eines Objekts in PHP? Sep 21, 2025 am 12:30 AM

UseUnSerialize (Serialize ($ OBJ)) FODEPCOPYPYWIEDALLDATAISSERIALIZIABLE; Andernfalls implementieren Sie __Clone () TomanuelleduplicatenestoBjectSandavoidSharedReferences.

Wie fusioniere ich zwei Arrays in PHP? Wie fusioniere ich zwei Arrays in PHP? Sep 21, 2025 am 12:26 AM

Usearray_merge () tocombinearrays, überschreibende DuplicatestringKeysandReindexingnumericKeys;

Wie verwende ich Namespaces in einem PHP -Projekt? Wie verwende ich Namespaces in einem PHP -Projekt? Sep 21, 2025 am 01:28 AM

NamespacesinphporganizeCodeAndPreventnamingConflictsByGroupingclasses, Schnittstellen, Funktionen und Constantsunderaspecificname.2.DefineAnaceStHenameSpaceKeyWorthetopoFafile, gefolgt von BythenameSpacename, solcheasapp \ controllers.3.

Was sind magische Methoden in PHP und liefern ein Beispiel für __call () `und __get ()`. Was sind magische Methoden in PHP und liefern ein Beispiel für __call () `und __get ()`. Sep 20, 2025 am 12:50 AM

The__call () methodistiggeredWenaninAccessibleorundEfinedMethodiscalledonanObject, erlaubt CustomHandlingByaccepthodnameandargumente, ashownwhencallingundEfinedMethodselikesayhello (). 2.The__get () methodisinvokedInacescessininginingininginingininginingininginingininginingincessibleceschessibleChessibleChessibleornonon-EX

Wie aktualisiere ich einen Datensatz in einer Datenbank mit PHP? Wie aktualisiere ich einen Datensatz in einer Datenbank mit PHP? Sep 21, 2025 am 04:47 AM

ToupDateadatabaserecordinphp, FirstConnectusepdoOrmysqli, ThenuSePreparedStatementStoExexexeSecuresQLUPDateQuery.example: $ pdo = newpdo ("MySQL: Host = LocalHost; dbname = your_database", $ username, $ username, $ username);

MySQL Bedingte Aggregation: Anwendungsfallerklärung zur Implementierung des Zustands und der Zählung von Feldern MySQL Bedingte Aggregation: Anwendungsfallerklärung zur Implementierung des Zustands und der Zählung von Feldern Sep 16, 2025 pm 02:39 PM

In diesem Artikel wird eingehalten, wie man Fallanweisungen verwendet, um eine bedingte Aggregation in MySQL durchzuführen, um eine bedingte Summierung und Zählung bestimmter Felder zu erreichen. In einem praktischen Abonnement -System -Fall zeigt es, wie die Gesamtdauer und Anzahl der Ereignisse dynamisch auf der Grundlage des Datensatzstatus (z. B. "Ende" und "Abbrechen") berechnet werden kann, wodurch die Einschränkungen herkömmlicher Summenfunktionen überwunden werden, die den Anforderungen der komplexen bedingten Aggregation nicht erfüllen können. Das Tutorial analysiert die Anwendung von Fallanweisungen in Summenfunktionen im Detail und betont die Bedeutung von Koaleszen, wenn es sich um die möglichen Nullwerte des linken Join befasst.

Wie bekomme ich die Dateierweiterung in PHP? Wie bekomme ich die Dateierweiterung in PHP? Sep 20, 2025 am 05:11 AM

Usepathinfo ($ filename, pathinfo_extension) togetTheFilextesion; itrelablyHandlesMultiPleDOTSandgeCases, ReturningTheExtesion (z.

See all articles