删除一条记录
删除一条记录时,删除对象需要指定主键,否则会触发批量Delete,例如:
// Email 的 ID 是 `10`
db.Delete(&email)
// DELETE from emails where id = 10;
// 带额外条件的删除
db.Where("name = ?", "张三").Delete(&email)
// DELETE from emails where id = 10 AND name = "张三";
根据主键删除
GORM允许通过主键(可以是复合主键)和内联条件来删除对象,它可以使用数字,如以下例子
db.Delete(&User{}, 10)
// DELETE FROM users WHERE id = 10;
db.Delete(&User{}, "10")
// DELETE FROM users WHERE id = 10;
db.Delete(&users, []int{1,2,3})
// DELETE FROM users WHERE id IN (1,2,3);
批量删除
如果指定的值不包括主属性,那么 GORM 会执行批量删除,它将删除所有匹配的记录
db.Where("email LIKE ?", "%张三%").Delete(&Email{})
// DELETE from emails where email LIKE "%张三%";
db.Delete(&Email{}, "email LIKE ?", "%张三%")
// DELETE from emails where email LIKE "%张三%";
软删除
如果你的模型包含了一个gorm.deletedat字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力!拥有软删除能力的模型调用Delete时,记录不会被数据库删除。但GORM会将DeletedAt置为当前时间, 并且你不能再通过普通的查询方法找到该记录。
// user 的 ID 是 `111`
db.Delete(&user)
// UPDATE users SET deleted_at="2022-03-04 10:16" WHERE id = 111;
// 批量删除
db.Where("age = ?", 20).Delete(&User{})
// UPDATE users SET deleted_at="2022-03-04 10:16" WHERE age = 20;
// 在查询时会忽略被软删除的记录
db.Where("age = 20").Find(&user)
// SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL;
如果你不想引入gorm.Model,你也可以这样启用软删除特性
type User struct {
ID int
Deleted gorm.DeletedAt
Name string
}
作者:admin 创建时间:2024-10-23 07:50
最后编辑:admin 更新时间:2024-10-23 07:50
最后编辑:admin 更新时间:2024-10-23 07:50