Gorm 中的级联删除不会删除关联表
Cascade Delete in Gorm does not remove Associated Tables
我是 Gorm 的新手。我正在尝试进行级联删除,如果我删除一个用户,则与该用户关联的角色(属于)、个人资料(有一个)和书籍(一对多)也将被删除。
我在下面设置了我的模型,但级联似乎不起作用。当我删除我的用户时,角色、个人资料和书籍仍保留在数据库中,而不是被删除/软删除。
谁能指出我哪里做错了?谢谢
用户模型
type User struct {
gorm.Model
Name string `json:"name"`
Age uint `json:"age"`
Profile Profile `gorm:"constraint:OnDelete:CASCADE;"`
RoleID int `json:"role_id"`
Role Role `gorm:"constraint:OnDelete:CASCADE;"`
Books []Book `gorm:"constraint:OnDelete:CASCADE;"`
}
type Book struct {
gorm.Model
Title string `json:"title"`
UserID uint `json:"user_id"`
}
type Profile struct {
gorm.Model
Country string `json:"country"`
UserID uint `json:"user_id"`
}
type Role struct {
ID int
Name string `json:"name"`
}
当使用 gorm.Model
时,或者更具体地说,当您的模型具有 gorm.DeletedAt
类型的字段时,GORM 使用 soft delete。也就是说,记录实际上并没有被删除,只是上述字段被更新,并且记录通常被排除在查询结果之外。因此,级联删除不会触发。
您可以使用 Unscoped
方法查找然后 实际上 删除软删除的对象。或者,更改您的模型,使其不受软删除的影响。
我是 Gorm 的新手。我正在尝试进行级联删除,如果我删除一个用户,则与该用户关联的角色(属于)、个人资料(有一个)和书籍(一对多)也将被删除。
我在下面设置了我的模型,但级联似乎不起作用。当我删除我的用户时,角色、个人资料和书籍仍保留在数据库中,而不是被删除/软删除。
谁能指出我哪里做错了?谢谢
用户模型
type User struct {
gorm.Model
Name string `json:"name"`
Age uint `json:"age"`
Profile Profile `gorm:"constraint:OnDelete:CASCADE;"`
RoleID int `json:"role_id"`
Role Role `gorm:"constraint:OnDelete:CASCADE;"`
Books []Book `gorm:"constraint:OnDelete:CASCADE;"`
}
type Book struct {
gorm.Model
Title string `json:"title"`
UserID uint `json:"user_id"`
}
type Profile struct {
gorm.Model
Country string `json:"country"`
UserID uint `json:"user_id"`
}
type Role struct {
ID int
Name string `json:"name"`
}
当使用 gorm.Model
时,或者更具体地说,当您的模型具有 gorm.DeletedAt
类型的字段时,GORM 使用 soft delete。也就是说,记录实际上并没有被删除,只是上述字段被更新,并且记录通常被排除在查询结果之外。因此,级联删除不会触发。
您可以使用 Unscoped
方法查找然后 实际上 删除软删除的对象。或者,更改您的模型,使其不受软删除的影响。