ManytoMany order

13 views
Skip to first unread message

Paul

unread,
Jan 30, 2017, 7:51:35 AM1/30/17
to grailsEnCastellano
Hola tengo lo siguiente:

class Combo implements Serializable{
    def String name
   
    static hasMany = [labels: Label]
    static belongsTo = Label

class Label implements Serializable{
    def String label
    def int orderLabel
    static hasMany = [combos: Combo]

Necesito obtener cada combo con sus labels correspondientes pero la lista de labels ordenadas por su orden

Si hago esto:
def combos = Combo.list()
def reult = [:]
       
        combos.each {
            result.put(it.name, it.labels)
        }

Los obtengo pero no ordenados

Iván López

unread,
Jan 30, 2017, 7:54:29 AM1/30/17
to grailsEnCastellano
Hola,

Para obtenerlos ordenados puedes hacer esto para que se aplique siempre un orden: http://docs.grails.org/latest/ref/Database%20Mapping/order.html

Por cierto, puedes (debes) quitar el "def" en la definición de los atributos de las clases de dominio porque ya estás poniendo su tipo. En lugar de "def String name", pon simplemente "String name".

Saludos, Iván.

--
Has recibido este mensaje porque estás suscrito al grupo "grailsEnCastellano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a grailsencastellano+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a grailsencastellano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/grailsencastellano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Paul

unread,
Jan 30, 2017, 10:38:26 AM1/30/17
to grailsEnCastellano
He modificado :

class Label implements Serializable{
    String label

    int orderLabel
    static hasMany = [combos: Combo]

    static mapping = {
        orderLabel "asc"
    }

y en el controller
    combos.each {
        result.put(it.name, it.labels)
    }

me lo sigue devolviendo desordenado
Para publicar en este grupo, envía un correo electrónico a grailsenc...@googlegroups.com.

Paul

unread,
Jan 30, 2017, 11:05:09 AM1/30/17
to grailsEnCastellano
solucion:
result.put(it.name, it.labels.sort{it.orderLabel})

Iván López

unread,
Jan 30, 2017, 11:55:04 AM1/30/17
to grailsEnCastellano
El problema de tu solución es que estás ordenando la colección en memoria cuando se podría hacer directamente en la base de datos. 

Creo que no te funciona porque no has puesto el "sort" en el mapping. 

Ah, otra cosa, si vas a hacer un each de una lista y luego añadir elementos a una lista o mapa, mírate los métodos collect y collectEntries porque hacen justo lo que necesitas. 

Saludos, Iván. 

--
Sent from my Nexus 5

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a grailsencastellano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a grailsenc...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/grailsencastellano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "grailsEnCastellano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a grailsencastellano+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a grailsencastellano@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages