41 votes

Comment commander par plus d'un champ dans Grails?

Existe-t-il un moyen d'obtenir une liste classée par deux champs, par exemple le nom et le prénom?

Je sais que .listOrderByLastAndFirst et .list (sorte: 'dernier, premier') ne fonctionneront pas.

82voto

mattlary Points 699

La réponse aux critères de Hates_ n'a pas semblé fonctionner pour moi; mettre "dernier, premier" dans l'ordre ne fera que provoquer des exceptions disant "Propriété" dernier, premier "non trouvé". Pour commander sur deux champs, vous pouvez procéder comme suit:

 def c = MyDomain.createCriteria()
def results = c.list {
    and{
       order('last','desc')
       order('first','desc')
    }
}
 

9voto

Arnar B Points 51

C'est assez vieux mais m'a aidé à trouver une solution appropriée. Un exemple de code "plus propre" en utilisant le raccourci withCriteria:

 def c = MyDomain.withCriteria {
    and {
        order('last', 'desc')
        order('first', 'desc')
    }
}
 

5voto

chim Points 1799

Critères de commande plus compliqués (testé dans Grails 2.1.0)

 def c = MyDomain.withCriteria {
    property {
        order('last', 'desc')
    }
    order('first', 'desc')
}
 

trie d'abord par MyDomain.property.last puis par MyDomain.first

4voto

Nakul Points 31

Cette requête fonctionne sur la base du premier champ. Lorsque le premier champ est vide, il est raccourci par le deuxième champ.

 order('last','desc')
order('first','desc')
 

3voto

Matthew Taylor Points 886

Je pense qu'un critère est le meilleur choix, mais vous avez fait le bon choix en essayant d'abord de trouver un outil de recherche. Lors de la récupération d'objets de domaine depuis GORM, l'ordre correct pour tenter cette tentative est le suivant: chercheur dynamique, critères, HQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X