删除操作
删除一条记录
删除对象需要指定主键或用Where指定额外条件
1 | // Email 的 ID 是 `10` |
根据主键删除
可以根据主键和内联条件删除对象,作为函数参数传入
1 | db.Delete(&User{}, 10) |
可以定义一个主键切片传给delete,以便高效删除数据
1 | var users = []User{{ID: 1}, {ID: 2}, {ID: 3}} |
批量删除
如果指定的值不包含主键,那么会删除所有匹配的记录
1 | db.Where("email LIKE ?", "%jinzhu%").Delete(&Email{}) |
阻止全局删除
当试图执行不带任何条件的批量删除时,GORM会返回错误,如果一定要做,必须添加一些条件或者使用原生SQL
1 | db.Delete(&User{}).Error // gorm.ErrMissingWhereClause |
软删除
若model包含gorm.DeleteAt字段,则该model会获得软删除的能力,当调用delete时,GORM不会从数据库中删除该记录,而是会将DeleteAt字段设置为当前时间,而后的一般方法无法查找到这条记录
1 | // user's ID is `111` |
使用db.Unscoped().Find()查找被软删除的记录
使用db.Unscoped().Delete()永久删除记录
删除标志
Unix时间戳:导入
gorm.io/plugin/soft_delete插件可以定义为unix时间戳毫秒和纳秒:添加结构体tag
gorm:"softDelete:milli/nano"1/0:添加结构体tag
gorm:"softDelete:flag"以上可以混合使用