在GORM 中,软删除(soft delete)是指将记录标记为已删除,而不是从数据库中永久删除记录。软删除可以保留已删除记录的历史记录,同时避免意外删除记录。在 GORM 中,您可以使用DeletedAt字段来实现软删除。如果您在模型中定义了DeletedAt字段,GORM 会自动为您添加一个软删除过滤器,使查询不包括已被标记为已删除的记录。
如果需要永久删除软删除的数据,可以使用Unscoped方法的Delete函数。Delete函数会从数据库中永久删除数据,包括软删除的数据。 代码语言:txt 复制 db.Unscoped().Delete(&user) 需要注意的是,gorm的软删除功能需要在数据库表中添加一个名为deleted_at的字段,并将其类型设置为datetime或timestamp,以便存储删除时间。
调用Delete方法后deleted_at就有值了(自动生成当前时间存入); 再次调用Find等查找方法时就会或略deleted_at不为空的记录,但是 调用Select方法时还是会返回对应的数据不管deleted_at是不是空,这也挺符合逻辑的 问题就在我调用Delete方法 之后,又想将deleted_at再次设置为空. 尝试使用Update方法,不报错也不生效... ...
DeletedAt为sql.NullTime类型,它实现了Scanner接口的Scan方法,实现了Valuer接口的Value方法;同时定义了MarshalJSON、UnmarshalJSON方法,还定义了QueryClauses方法,使用的是SoftDeleteQueryClause;DeleteClauses方法使用的是SoftDeleteDeleteClause SoftDeleteQueryClause gorm.io/gorm@v1.20.10/soft_delete.go typeSoftDeleteQuery...
如果您的模型包含了一个gorm.deletedat字段(gorm.Model已经包含了该字段),它将自动获得软删除的能力! 拥有软删除能力的模型调用Delete时,记录不会从数据库中被真正删除。但 GORM 会将DeletedAt置为当前时间, 并且你不能再通过普通的查询方法找到该记录。
gorm的DeletedAt为sql.NullTime类型,它定义了QueryClauses方法,使用的是SoftDeleteQueryClause,它的ModifyStatement方法会追加DeletedAt为nil的查询条件;DeleteClauses方法使用的是SoftDeleteDeleteClause,它的ModifyStatement方法会设置DeletedAt为当前时间。 doc gorm 原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不...
"user_id" integer REFERENCES users(id) on update no action on delete no action, "id" serial,"created_at" timestamp with time zone, "updated_at" timestamp with time zone, "deleted_at" timestamp with time zone , PRIMARY KEY ("id") ...
zhangan' AND `stus`.`deleted_at` IS NULLdb.Delete(&Stu{})//该条目将会报错,禁止全部删除db.Unscoped().Where("name = ?","stu90").Delete(&Stu{})//该语句将会永久删除条目db.Where("name=?","lisi").Find(&stu2)//由于lisi被软删除了,所以这个时候这个语句查询不到fmt.Println(stu2)//...
DeletedAt为sql.NullTime类型,它实现了Scanner接口的Scan方法,实现了Valuer接口的Value方法;同时定义了MarshalJSON、UnmarshalJSON方法,还定义了QueryCla...
gorm.Model 的方式,完成主键、增删改时间等4列信息的一键添加,并且由于声明了 DeletedAt 字段,gorm ...