问题描述
我正在使用 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"`
}
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)