Создание с Гормс и многие2many - PullRequest
0 голосов
/ 30 марта 2019

У меня есть следующие модели

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 голосов
/ 30 марта 2019

Gorm имеет функцию автоматического сохранения ассоциаций и ссылок на них из структуры.В вашем случае вам нужно передать правильный объект JSON, например, если вы передадите:

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

Gorm создаст новый язык с именем "EN" и объединит его со строкой пользователя, найденной по идентификатору 1, создав новыйстрока в таблице user_language.

Подробнее об ассоциациях Горм: http://gorm.io/docs/associations.html

...