阅读量:0
GORM(Go Object Relational Mapper)是一个用于Go语言的ORM库,它提供了软删除(Soft Delete)功能。软删除并不会从数据库中永久删除记录,而是将记录标记为已删除,这样在查询时可以过滤掉这些记录。这对于保留数据完整性和审计跟踪非常有用。
在GORM中,软删除功能是通过在模型结构体中添加一个名为DeletedAt
的字段来实现的。这个字段应该是gorm.DeletedAt
类型,它是一个自定义的时间类型,用于表示记录被删除的时间。当记录被删除时,DeletedAt
字段会被设置为当前时间,而不是将记录从数据库中完全删除。
当你使用GORM进行查询时,它会自动过滤掉那些DeletedAt
字段不为空的记录,因为这意味着这些记录已经被软删除。这样,你的查询结果只会包含未被删除的记录。
例如,假设你有一个名为User
的模型,它包含一个DeletedAt
字段:
type User struct { ID uint Name string Email string DeletedAt gorm.DeletedAt `gorm:"index"` }
当你使用GORM查询所有用户时:
var users []User db.Find(&users)
GORM会生成类似于以下的SQL查询:
SELECT * FROM users WHERE deleted_at IS NULL;
这个查询会返回所有未被软删除的用户记录。
如果你想要在查询中包含已删除的记录,可以使用Unscoped
方法:
var users []User db.Unscoped().Find(&users)
这将生成以下SQL查询:
SELECT * FROM users;
这个查询会返回所有用户记录,包括已被软删除的记录。