https://gorm.io/docs/delete.html#Soft-Delete
import "gorm.io/plugin/soft_delete"
type User struct {
ID uint
Name string
DeletedAt soft_delete.DeletedAt
}
// Query
SELECT * FROM users WHERE deleted_at = 0;
// Delete
UPDATE users SET deleted_at = /* current unix second */ WHERE ID = 1;
We now support ms and ns timestamp when filling the deleted_at
col, only need to specify tag gorm:"softDelete:milli"
or gorm:"softDelete:nano"
.
type User struct {
ID uint
Name string
DeletedAt soft_delete.DeletedAt `gorm:"softDelete:milli"`
// DeletedAt soft_delete.DeletedAt `gorm:"softDelete:nano"`
}
// Query
SELECT * FROM users WHERE deleted_at = 0;
// Delete
UPDATE users SET deleted_at = /* current unix milli second or nano second */ WHERE ID = 1;
flag mode will use 0
, 1
to mark data as deleted or not, 1
means deleted
type User struct {
ID uint
Name string
IsDel soft_delete.DeletedAt `gorm:"softDelete:flag"`
}
// Query
SELECT * FROM users WHERE is_del = 0;
// Delete
UPDATE users SET is_del = 1 WHERE ID = 1;
mixed mode will use 0
, 1
to mark data as deleted or not, 1
means deleted, and store delete time
type User struct {
ID uint
Name string
DeletedAt time.Time
IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"`
}
// Query
SELECT * FROM users WHERE is_del = 0;
// Delete
UPDATE users SET is_del = 1, deleted_at = /* current unix second */ WHERE ID = 1;
support mixed mode specify time unit, e.g. gorm:"softDelete:flag,DeletedAtField:DeletedAt"
or gorm:"softDelete:flag,DeletedAtField:DeletedAt,DeletedAtFieldUnit:milli"
or gorm:"softDelete:flag,DeletedAtField:DeletedAt,DeletedAtFieldUnit:nano"
.
type User struct {
ID uint
Name string
DeletedAt int64
IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt,DeletedAtFieldUnit:milli"`
}
// Query
SELECT * FROM users WHERE is_del = 0;
// Delete
UPDATE users SET is_del = 1, deleted_at = /* current unix milli second second*/ WHERE ID = 1;