Come analizzare, persistere e recuperare una stringa con tag separati da spazi?
Domanda
Il mio database è composto da 3 tabelle (una per la memorizzazione di tutti gli elementi, una per i tag e una per la relazione tra i due):
Tabella: Posta Colonne: PostID, Nome, Desc
Tabella: tag Colonne: TagID, Nome
Tabella: PostTag Colonne: PostID, TagID
Qual è il modo migliore per salvare una stringa separata da spazio (ad es. "intelligente divertente meraviglioso") nelle 3 tabelle di database mostrate sopra?
Alla fine dovrei anche recuperare i tag e visualizzarli di nuovo come una stringa. Grazie!
Soluzione
All'incirca, qualcosa del genere:
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()
}
}
}
Altri suggerimenti
Se hai una tabella di tag, non avresti una riga per ogni tag?
tag.id = 1; tag.name = 'smart'
tag.id = 2; tag.name = 'funny'
tag.id = 3; tag.name = 'wonderful'
In Groovy / Grails, li avresti recuperati come un elenco, possibilmente concatenandoli in un elenco separato da spazi per la visualizzazione.
A meno che io non abbia veramente frainteso la domanda, Groovy / Grails / GORM gestirà questo problema con poco o nessun codice con l'impalcatura di default, nessuna vera codifica richiesta.