zoukankan      html  css  js  c++  java
  • go语言gorm的delete

    阻止全局删除


    如果在没有任何条件的情况下执行批量删除,GORM 不会执行该操作,并返回 ErrMissingWhereClause 错误

    对此,你必须加一些条件,或者使用原生 SQL,或者启用 AllowGlobalUpdate 模式,例如:

    db.Delete(&User{}).Error // gorm.ErrMissingWhereClause
    
    db.Where("1 = 1").Delete(&User{})
    // DELETE FROM `users` WHERE 1=1
    
    db.Exec("DELETE FROM users")
    // DELETE FROM users
    
    db.Session(&gorm.Session{AllowGlobalUpdate: true}).Delete(&User{})
    // DELETE FROM users

    软删除


    如果您的模型包含了一个 gorm.DeletedAt 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力!

    拥有软删除能力的模型调用 Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过正常的查询方法找到该记录。

    // user 的 ID 是 `111`
    db.Delete(&user)
    // UPDATE users SET deleted_at="2013-10-29 10:23" WHERE id = 111;
    
    // 批量删除
    db.Where("age = ?", 20).Delete(&User{})
    // UPDATE users SET deleted_at="2013-10-29 10:23" 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
    }
     
    永久删除
    db.Unscoped().Where("age = 20").Find(&users)
    // SELECT * FROM users WHERE age = 20;

    您可以使用 Unscoped 找到被软删除的记录查找被软删除的记录

     

  • 相关阅读:
    ”锁“-LockSupport深入浅出
    python利器之切片
    i 是一个修饰符 (搜索不区分大小写)
    react ---- svg(绘图---桑葚图)
    react---后台管理系统推荐(ant disgin)
    vue____后台管理系统搭建(推荐,懒得自己写了)
    H5 -- 简单的 跳转下载APP(自备份留存)
    小程序UI框架推荐----自用备份---colorUI
    H5-----注册 示例
    H5 ---- 地图--周边搜索
  • 原文地址:https://www.cnblogs.com/gjx1212/p/14593115.html
Copyright © 2011-2022 走看看