Lorsque vous travaillez avec des bases de données, il est courant de rencontrer des situations dans lesquelles certains champs peuvent être vides ou NULL. Un défi qui se pose souvent est de savoir comment trier les enregistrements de manière à ce que les lignes contenant des champs vides apparaissent en bas de l'ensemble de résultats, tandis que celles contenant des valeurs non vides soient classées de manière significative (par exemple, par ordre décroissant). Dans cet article, je vais vous montrer comment y parvenir dans Laravel à l'aide d'un exemple pratique.
Disons que vous disposez d'un tableau de participants pour une activité et que chaque participant peut ou non avoir un horodatage Attend_at, qui enregistre le moment où le participant a assisté à l'activité. Vous souhaitez lister tous les participants, en les triant de telle manière que :
Par défaut, la méthode last() de Laravel trie les enregistrements par colonne donnée par ordre décroissant. Cependant, il ne gère pas le cas où certains enregistrements ont des valeurs NULL ou vides. Si vous utilisez simplement :
return $this ->participants() ->with('user') ->latest('attended_at') ->get();
Il classera les participants avec un horodatage, mais ne déplacera pas les valeurs NULL vers le bas.
Nous pouvons réaliser le tri souhaité en utilisant la méthode orderByRaw(). Cela nous permet d'écrire une logique de tri personnalisée à l'aide d'expressions SQL brutes. Dans ce cas, nous trierons selon que Attend_at est NULL, puis trierons par Attend_at par ordre décroissant pour les valeurs non NULL.
Voici comment écrire cette requête dans Laravel :
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();
La fonction map() est ensuite utilisée pour formater la sortie dans la structure souhaitée, y compris des champs tels que l'id_étudiant, le nom et le statut, et pour convertir l'horodatage Attend_at en un format lisible par l'homme ou « - » s'il l'est. vide.
La gestion du tri avec des valeurs NULL ou vides dans Laravel est une tâche courante lorsque l'on travaille avec des données qui ne sont pas toujours complètes. En utilisant la méthode orderByRaw() avec une expression SQL telle que Attend_at IS NULL, Attend_at DESC, vous pouvez facilement vous assurer que les lignes avec des valeurs NULL apparaissent en bas tout en triant le reste des données de manière significative.
Cette méthode est particulièrement utile dans les scénarios où vous avez affaire à des présences, comme le montre cet exemple, mais elle peut être appliquée à de nombreuses autres situations dans lesquelles certains champs de données peuvent être manquants. Avec cette approche, vous pouvez offrir à vos utilisateurs un affichage plus clair et plus intuitif des enregistrements dans votre application.
Bon codage !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3