Maison > Article > base de données > Comment trier les résultats Laravel par nombre de relations ?
Trier les résultats d'une base de données en fonction du nombre d'enregistrements associés dans une relation plusieurs-à-plusieurs peut être une tâche complexe. Explorons une solution pour un tel scénario.
Considérez le schéma de base de données suivant :
hackathons id name ... hackathon_user hackathon_id user_id users id name
Pour récupérer les hackathons les plus populaires en fonction du nombre de participants, nous devons utiliser une requête de jointure et regroupez les résultats par ID de hackathon, en comptant le nombre de participants pour chaque hackathon. Ceci peut être réalisé en utilisant la requête suivante :
$hackathons = DB::table('hackathons') ->join('hackathon_user', 'hackathon_user.hackathon_id', '=', 'hackathons.id') ->groupBy('hackathon_user.hackathon_id') ->select('hackathons.id', 'hackathons.name', DB::raw('COUNT(*) as participant_count')) ->orderBy('participant_count', 'desc') ->get();
Cette requête récupérera les hackathons classés en fonction du nombre de participants, le hackathon le plus populaire étant répertorié en premier.
Alternativement, si vous utilisez Eloquent de Laravel ORM, vous pouvez utiliser l'approche suivante :
Hackathon::withCount('participants')->orderBy('participants_count', 'desc')->get();
Cette approche est plus pratique et plus simple, mais elle s'appuie sur la méthode withCount() d'Eloquent, qui peut ne pas être disponible dans les anciennes versions de Laravel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!