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 方法查找然后 实际上 删除软删除的对象。或者,更改您的模型,使其不受软删除的影响。