用gorms和many2many创建

时间:2019-03-30 11:50:53

标签: rest go go-gorm

我有以下型号

type User struct {
  gorm.Model
  Languages         []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
  Users              []User `gorm:"many2many:user_languages;"`
}

为了创建一种语言,我这样做:

func CreateLanguage(db *gorm.DB, w http.ResponseWriter, r *http.Request) {
    language := models.Language{}

    decoder := json.NewDecoder(r.Body)
    if err := decoder.Decode(&language); err != nil {
        respondError(w, http.StatusBadRequest, err.Error())
        return
    }
    defer r.Body.Close()

    if err := db.Save(&language).Error; err != nil {
        respondWithError(w, http.StatusInternalServerError, err.Error())
        return
    }
    respondWithJSON(w, http.StatusCreated, language)
}

当我检查数据库时,表Language充满了我创建的语言,但是user_languages没有充满。我以为gorm负责在您使用gorm:"many2many:user_languages;"时更新中间表,并且引擎将找出如何管理创建的内容。

那么问题:当您拥有gorm关系时,如何使用many2many管理创建?

1 个答案:

答案 0 :(得分:0)

Gorm具有从结构自动保存关联及其引用的功能。在您的情况下,您需要传递正确的JSON对象,例如,如果传递:

{
    "Name": "EN",
    "Users": [
        {
            "ID": 1
        }
    ]
}

Gorm将创建名称为“ EN”的新语言,并通过在user_language表中创建新行将其与ID为1的用户行合并。

了解有关Gorm关联的更多信息:http://gorm.io/docs/associations.html