2009-02-06 10 views
16

Angenommen, ich habe ein Benutzerobjekt mit GORM definiert. Jeder Benutzer kann keine oder mehrere Anmeldedaten haben: s. Jedes Login hat einen Zeitstempel. Beim Abrufen von user.logins möchte ich die Logins basierend auf dem Wert von login.date sortieren. Was ist der richtige Weg, um dies zu erreichen?Definieren der Standard-Sortierreihenfolge in Grails/GORM

Beispiel: Ich möchte den folgenden Code, um alle Benutzernamen in aufsteigender Reihenfolge aufzulisten.

<g:each var="login" in="${user.logins}"> 
    <tr> 
    <td>${login.date}</td> 
    </tr> 
</g:each> 

Dies sind die referenzierten Klassen:

class User { 
    ... 
    def hasMany = [logins: Login] 
    static fetchMode = [logins: "eager"] 
} 

class Login { 
    Date date 
    ... 
    def belongsTo = [User] 
} 

Ich bin mit Grails 1.0.4, die die aktuelle stabile Version ist.

Antwort

8

Der Umgang mit Standardsortierreihenfolge in Grails/GORM zu haben scheint wurde in Grails 1.1 radikal vereinfacht:

  • Grails 1.1 release notes (Suche nach "Standard Sor t Bestellung ")
  • 14

    So stellen Sie die Login-Klasse, die Comparable-Schnittstelle implementieren:

    class Login implements Comparable { 
    
        // ... 
    
        Date date 
    
        public int compareTo(def other) { 
         return date <=> other?.date // <=> is the compareTo operator in groovy 
        } 
    
    } 
    

    und erklären die Beziehung ein SortedSet zu sein:

    class User { 
        ... 
        def hasMany = [logins: Login]    
        SortedSet logins 
    
        static fetchMode = [logins: "eager"] 
    } 
    
    27

    Sie zeigen, wie dies auf der GORM-Seite im Referenzhandbuch (Abschnitt 5) zu tun ist. Das gewünschte Bit befindet sich am unteren Rand des Dokuments und ist der gewünschte Abschnitt. Sie haben zwei einfache Beispiele:

    class Airport { 
        … 
        static mapping = { 
         sort "name" 
        } 
    } 
    
    class Airport { 
        … 
        static mapping = { 
         sort name:"desc" 
        } 
    } 
    

    sie auch ein Beispiel für das Sortieren auf einer Vereinigung haben:

    class Airport { 
        … 
        static hasMany = [flights:Flight] 
        static mapping = { 
         flights sort:'number' 
        } 
    } 
    
    +2

    Und wenn Sie wollen über die Assoziation absteigend: 'Flüge sort:‚Zahl‘, um:‚desc '' (nach http://grails.1312388.n4.nabble.com/sort-by-association-descending-td1312425.html) –

    +0

    Wie kann ich mehrere Attribute sortieren? – ricardogobbo

    Verwandte Themen