删除记录
删除记录时,需要有条件,否则会引发错误 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 会将 DeletedAt
的值设置为当前时间,并且无法再使用普通的查询方法找到该数据。
// Batch Delete |
如果您不想包含 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() |
删除关联
删除源和参数之间的关系(如果存在),仅删除引用,不会从数据库中删除这些对象。
u := query.User |
使用 Select 删除
您可以在删除记录时使用 Select
删除选定的 has one/has many/many2many 关系,例如
u := query.User |