如何在 GORM 中永久删除关联?

6
我想知道如何在GORM中永久删除关联。我尝试了文档中显示的所有示例,但无法使关联被永久删除。例如,我对GORM文档中删除清除关联的说明感到困惑,其中明确指出:不会从数据库中删除这些对象。(我不理解删除对象而不从数据库中删除它们是什么意思。)
我有类似的结构体:
type User struct {
    gorm.Model
    City    string `sql:"type:varchar(255);not null"`
    Cards   []Card `gorm:"foreignKey:UserID;constraint:OnDelete:CASCADE"`
}

type Card struct {
    ID      uint   `gorm:"primary_key"`
    UserID  uint   `gorm:"column:user_id"`
}

我希望以GORM形式执行以下SQL查询:

DELETE c
FROM cards c
JOIN users u ON c.user_id = u.id
WHERE u.name = `Madrid`
1个回答

5

gorm.Model 包含一个 DeletedAt 字段。因此,在删除记录时,该字段将被设置为当前日期,记录不会从数据库中移除,但不能使用普通的查询方法查找到它。这称为“软删除”。

要永久删除记录,您必须使用 Unscoped,例如:

db.Unscoped().Delete(&order)

Source: https://gorm.io/docs/delete.html


在我的实验中,使用db.Select(clause.Associations).Delete(&user)仅仅是硬删除了所有关联。我来这里寻找解决相反问题的方法;我只想软删除它们。是否有一种方法可以避免使用db.Model(&user).Association("Cards").Clear(),而无需列出所有关联(可称为硬编码)?另外需要指出的是,该答案会删除父记录,而这并不是问题想要的结果。 - scenia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接