没有得到基于 ID 的删除用户记录

问题描述

我正在使用 Go 与来自用户和角色表的 Gorm 多对多关联。

type User struct {
    //gorm.Model
    ID               int64          `json:"id" gorm:"primary_key"`
    Active           sql.NullString ` json:"active " `
    Email            string         `json:"email"`
    FullName         string         `json:"full_name"`
    Password         string         `json:"password"`
    Username         string         `json:"username"`
    Groups           string         `json:"groups"`
    Otp              string         `json:"otp"`
    CreatedTimeStamp time.Time      `json:"created_time_stamp"`
    UpdateTimeStamp  time.Time      `json:"update_time_stamp"`
    LastLogin        time.Time      `json:"last_login"`
    UserCount        uint           `json:"user_count" `
    Roles            []Role         `gorm:"many2many:user_roles;"`
}

type Role struct {
    //gorm.Model
    ID    int64  `json:"id" gorm:"primary_key"`
    Name  string `json:"name"`
    Users []User `gorm:"many2many:user_roles"`
}

使用以下代码根据用户 ID 删除用户记录和角色。

var roles []Role
db.Model(Role{}).Where("Name = ?","ROLE_ADMIN").Take(&roles)
newUser := &User{
    Email: user.Email,FullName: user.FullName,Username: user.Username,Groups: groupCreation(user.Username),Password: EncodePassword(user.Password),CreatedTimeStamp: time.Now(),UpdateTimeStamp: time.Now(),LastLogin: time.Now(),Roles: roles
}

db.Save(newUser)

**db.Model(&user).Association("Role").Delete(&newUser)**

一旦执行了最后一条语句,但没有从表用户用户角色中获得删除(无影响)记录。 请告诉我什么是问题。

解决方法

此代码:

db.Model(&user).Association("Role").Delete(&newUser)

来自 Gorm 文档:

Remove the relationship between source & arguments if exists,only delete the reference,won’t delete those objects from DB.

您需要使用 Delete with Select here

所以实际上应该是:

db.Select("Role").Delete(&newUser)