0

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

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)**

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

4

1 回答 1

0

这段代码:

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 https://gorm.io/docs/associations.html#Delete-with-Select

所以实际上应该是:

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

于 2021-02-06T14:55:03.577 回答