Un tutoriel pour regrouper les données d'une collection par date (jours, mois et année) dans un projet Laravel
🌎 La version anglaise de cette publication : How to group a collection by day, month and year in Laravel
Une collection du framework PHP Laravel est une classe qui peut être utilisée pour manipuler des ensembles de données. Elle fournit des méthodes pour travailler avec des tableaux de données et des objets, permettant de les filtrer, les grouper, les trier et les manipuler de manière efficace.
Dans ce tutoriel, nous voulons voir comment regrouper les données d'une collection en jours, mois et année. Pour ce faire, nous allons utiliser les méthodes groupBy()
de la collection et format()
de la librairie Carbon qui permet de manipuler les dates et les heures.
Considérons une collection d'utilisateurs App\Models\User.php
que nous pouvons obtenir à l'aide de l'instruction suivante :
$users = User::all(); // La collection des utilisateurs
// $users = User::orderBy("created_at")->get(); // La collection des utilisateurs ordonnée par le champ "created_at"
Pour chaque utilisateur, nous disposons d'une date de création (created_at
) de type timestamp
que nous pouvons exploiter pour regrouper les données de la collection selon un format de date :
$users_grouped = $users->groupBy(function ($item, $key) {
return $item->created_at->format('d-m-Y');
});
Dans ce code source, nous avons :
groupBy()
qui regroupe les éléments de la collection. Elle prend en paramètre une fonction anonyme qui donne accès à chaque élément ou $item
de la collection.$item
, nous formatons la date created_at
en d-m-Y
(jour-mois-année) en utilisant la méthode format()
. Les formats acceptés sont décrits dans la documentation de datetime.📄 Notez-bien : Les attributs created_at
et updated_at
des modèles de Laravel sont des objets Illuminate\Support\Carbon
par défaut. Si vous utilisez un autre champ temporel dans votre modèle et que vous voulez l'exploiter et le traiter comme un objet Carbon
, vous pouvez le convertir en utilisant la propriété $casts
du modèle :
protected $casts = [
"exemple_date" => "datetime",
];
Enfin, nous pouvons afficher la collection regroupée par date sur vue Blade de cette façon :
<ul>
@foreach ($users_grouped as $date_group)
<li>
{{ $date_group->first()->created_at->format('d-m-Y') }}
<ul>
@foreach ($date_group as $user)
<li>{{ $user->name }}</li>
@endforeach
</ul>
</li>
@endforeach
</ul>
Voici un exemple de résultat que ce code source peut afficher dans le navigateur :
Portez-vous bien 😎
Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.
Wilo Ahadi, l'auteur
Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School
Voir profil
Commentaires