Представим ситуацию, что нужно удалить записи из таблицы связи many-to-many. Пусть у нас есть некие пользователи и некоторые общие файлы, которые могут принадлежать любому пользователю. Нужно “убрать” файлы у конкретного пользователя без реального удаления.
Родительская структура, представляющая пользователя:
type User struct {
ID uint64 `gorm:"primaryKey;->" json:"id"`
UserName null.String `json:"userName" gorm:"column:user_name"`
PasswordHash null.String `json:"type" gorm:"column:password_hash"`
Files []File `gorm:"many2many:user_file;"`
} // @name UserДругая – вложенная, описывает файлы этого пользователя:
type File struct {
ID uint64 `gorm:"primaryKey;->" json:"id"`
FileName null.String `json:"fileName"`
FileHash string `gorm:"size:150" json:"hash"`
CreatedAt int64 `gorm:"column:created;autoCreateTime" json:"createdAt"`
} // @name FileТребуется удалить все привязки пользователя к файлам, не удаляя сами файлы. Сделать это можно следующим образом:
func DeleteFiles(user *User, files []File) error {
return db.
Model(&user).
Association("Files").
Delete(&files)
}