我有两个与m2m关系的模型:
type Post struct {
ID uint
Name string `gorm:"unique"`
Body string
Tags []Tag `gorm:"many2many:post_tags;"`
}
type Tag struct {
ID uint
Name string `gorm:"unique"`
}
我发送POST请求以创建“post”,它由以下处理程序处理:
func (db *gorm.DB) CreatePost(w http.ResponseWriter, r *http.Request) {
var post Post
if err := json.NewDecoder(r.Body).Decode(&post); err != nil {
ErrorWithJSON(w, "Can not decode json", http.StatusBadRequest)
return
}
db.Save(&post)
ResponseWithJSON(w, &post, http.StatusOK)
}
现在我将以下POST请求发送到我的api:
{
"Name": “test1",
"Body": “body1",
"Tags": [
{
"Name": “tag1"
},
{
"Name": “tag2"
}
]
}
相应的标签和帖子按预期成功保存在数据库中。
但是当我用不同的帖子的名字和正文发送下一个请求,但是相同的标签如下...
{
"Name": “test2",
"Body": “body2",
"Tags": [
{
"Name": “tag1"
},
{
"Name": “tag2"
}
]
}
...我想创建逻辑,它将创建新帖子并将现有标签分配给它或以其他方式同时创建新帖子和标签并创建它们之间的关系。简单地说,如何检查相关记录是否存在,而不是尝试再次保存它,而只是将它放在关系表上?
使用gorm创建此逻辑的最佳方法是什么?