Представим ситуацию, что нужно удалить записи из таблицы связи 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)
}

От a-pro

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *