Como analisar, persistir e recuperar uma corda com etiquetas separadas por espaços?
Pergunta
O meu banco de dados consiste de 3 tabelas (uma para armazenar todos os itens, um para as tags, e outra para a relação entre as duas):
Table: Post Colunas: postID, Nome, desc
Table: Tag Colunas: TagID, Nome
Table: PostTag Colunas: postID, TagID
Qual é a melhor maneira de salvar um espaço separado string (por exemplo, "inteligente engraçado maravilhoso") nas tabelas de banco de dados 3 mostrada acima?
Em última análise, eu também preciso recuperar as tags e exibi-lo como uma string novamente. Obrigado!
Solução
A grosso modo, algo como isto:
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()
}
}
}
Outras dicas
Se você tem uma tabela Tag, que não tem uma linha para cada Tag?
tag.id = 1; tag.name = 'smart'
tag.id = 2; tag.name = 'funny'
tag.id = 3; tag.name = 'wonderful'
Em Groovy / Grails, você recuperá-los como uma lista, possivelmente, concatenando-los em um espaço lista separada para exibição.
A menos que eu estou realmente mal-entendido a pergunta, Groovy / Grails / GORM irá lidar com isso com pouco ou nenhum código com o andaime padrão, há real necessidade de codificação.