Maison  >  Article  >  base de données  >  Comment trier les résultats Laravel par nombre de relations ?

Comment trier les résultats Laravel par nombre de relations ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 21:12:02445parcourir

How to Order Laravel Results by Relationship Count?

Laravel : trier les résultats 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn