У меня есть структура many2many, похожая на пример GORM:
// User has and belongs to many languages, use `user_languages` as join table
type User struct {
gorm.Model
Languages []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
gorm.Model
Name string
}
db.Model(&user).Related(&languages)
Допустим, я создаю пользователя, и у него есть два связанных языка.
Я беру запись пользователя из базы данных и удаляю один язык из массива языков пользователя. Затем я сохраняю пользователя, задав для gorm: save_associations значение true.
Я ожидал, что GORM удалит запись, связывающую пользователя с этим языком (в таблице ассоциаций, которой управляет GORM). Однако он не удален. Ожидается ли это?
Можно ли удалить многие записи ассоциации, удалив язык из списка языков в записи пользователя, а затем сохранив пользователя? Если нет, то как это сделать в ГОРМ?
Обновить
Я нашел решение этого вопроса, но не уверен, что это лучший способ. Я сохраняю текущие языки, очищаю все ассоциации, затем добавляю языки, затем сохраняю.
languages := user.Languages
DB.Model(&user).Association("Languages").Clear()
user.Languages = languages