删除记录
当删除一条记录时,需要满足一些条件否则程序会抛出ErrMissingWhereClause
异常,例如:
e := query.Email |
通过主键删除
GEN 允许使用带有内联条件的主键删除对象,它适用于数字
u.WithContext(ctx).Where(u.ID.In(1,2,3)).Delete() |
批量删除
如果指定值不包括主键,GEN 将执行批量删除,删除所有匹配记录
e := query.Email |
软删除
如果你的模型包含了 gorm.DeletedAt
字段(在gorm.Model
中),那么该模型将会自动获得软删除的能力!
当调用Delete
时,GORM并不会从数据库中删除该记录,而是将该记录的DeleteAt
设置为当前时间,之后普通查询方法将无法查找到此条记录。
// 批量删除 |
如果你不想嵌入 gorm.Model
,你也可以这样启用软删除特性:
type User struct { |
查找被软删除的记录
你可以使用 Unscoped
找到被软删除的记录
users, err := db.WithContext(ctx).Unscoped().Where(u.Age.Eq(20)).Find() |
永久删除
你可以使用 Unscoped
来永久删除匹配的记录
o.WithContext(ctx).Unscoped().Where(o.ID.Eq(10)).Delete() |
删除关联
Remove the relationship between source & arguments if exists, only delete the reference, won’t delete those objects from DB.
u := query.User |
带 Select 的删除
你可以在删除记录时通过 Select
来删除具有 has one、has many、many2many 关系的记录,例如:
u := query.User |