Laravel : Classement par nombre de relations
Dans ce cas, vous souhaitez trouver des hackathons triés en fonction du nombre de participants associés à chacun. La structure du tableau fournie et les définitions du modèle donnent un schéma relationnel clair.
La première tentative d'obtention du résultat, comme mentionné dans la question, contenait quelques défauts. Premièrement, il n'est pas recommandé de récupérer le nombre de modèles associés à l'aide de find, car cela charge rapidement la relation, ce qui peut s'avérer inefficace pour les grands ensembles de données. Deuxièmement, $this->id référencé dans la requête est incorrect, car il fait référence à l'instance de modèle utilisée pour effectuer la requête, et non à l'ID du hackathon.
Pour obtenir l'ordre souhaité, l'approche suivante utilisant Laravel Le chargement rapide et les relations nommées de 5.3 peuvent être utilisés :
Hackathon::withCount('participants') ->orderBy('participants_count', 'desc') ->paginate(10);
En utilisant withCount, le nombre de participants associés est chargé avec impatience dans la requête, obtenant efficacement le nombre sans requêtes de base de données supplémentaires. La clause orderBy trie ensuite les résultats par ordre décroissant en fonction de l'attribut participants_count, fournissant ainsi les hackathons les plus populaires en fonction du nombre de participants.
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!