¿Cómo analizar, persistir y recuperar una cadena con etiquetas separadas por espacios?

StackOverflow https://stackoverflow.com/questions/245654

  •  05-07-2019
  •  | 
  •  

Pregunta

Mi base de datos consta de 3 tablas (una para almacenar todos los elementos, una para las etiquetas y otra para la relación entre las dos):

Tabla: Post Columnas: PostID, Nombre, Desc.

Tabla: Etiqueta Columnas: ID de etiqueta, nombre

Tabla: PostTag Columnas: PostID, TagID

¿Cuál es la mejor manera de guardar una cadena separada por espacios (por ejemplo, "smart funny wonderful") en las 3 tablas de la base de datos que se muestran arriba?

En última instancia, también necesitaría recuperar las etiquetas y mostrarlas como una cadena nuevamente. Gracias!

¿Fue útil?

Solución

A grandes rasgos, algo como esto:

class Post {
    static hasMany [tags:Tag]
}

class Tag {
    static belongsTo = Post
    static hasMany [posts:Post]
}

class someService {

    def createPostWithTags(name, desc, tags) {      
        def post = new Post(name: name, desc: desc).save()
        tags.split(' ').each { tagName ->
            def tag = Tag.findByName(tag) ?: new Tag(name: tagName)
            post.addToTags(tag).save()
        }       
    }

}

Otros consejos

Si tiene una tabla de etiquetas, ¿no tendría una fila para cada etiqueta?

tag.id = 1; tag.name = 'smart'
tag.id = 2; tag.name = 'funny'
tag.id = 3; tag.name = 'wonderful'

En Groovy / Grails, los recuperarías como una lista, posiblemente concatenándolos en una lista separada por espacios para mostrar.

A menos que esté realmente malinterpretando la pregunta, Groovy / Grails / GORM manejará esto con poco o ningún código con el andamio predeterminado, no se requiere codificación real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top