xorm - 软删除
在xorm标记中使用deleted标记,且对应的字段必须为time.Time类型。
packagemain
import(
_"github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
"time"
"os"
"fmt"
)
type User struct {
Id int64
Name string
Age int
DeletedAt time.Time `xorm:"deleted"` // 软删除字段类型必须为time.Time
}
var x *xorm.Engine
func init () {
var err error x, err = xorm.NewEngine("mysql", "root:@/go?charset=utf8")
if err != nil {
log.Fatalf("fail to create engine, err : %v", err)
}
if err := x.Sync(new(User)) ; err != nil {
log.Fatalf("fail to sync database, err : %v", err)
}
x.ShowSQL(true)
f, err := os.Create("sql.log") if err != nil {
log.Fatalf("to fail create sql.log, err : %v", err)
}
x.SetLogger(xorm.NewSimpleLogger(f))
}
func main () {
user := &User{}
id := 1
// get once
has, err := x.Id(id).Get(user)
if err != nil {
log.Fatalf("fail to get, err : %v", err)
} else if !has {
log.Fatalf("not fund, err : %v", err)
}
// delete action
fmt.Printf("%#v \n", user)
a, err := x.Id(id).Delete(user)
if err != nil {
log.Fatalf("fail to delete, err : %v", err)
}
fmt.Println(a)
// get again
isHas, isErr := x.Id(id).Get(user)
if isErr != nil {
log.Fatalf("fail to get, err : %v", isErr)
} else if !isHas {
log.Fatalf("not fund, err : %v", isErr)
}
fmt.Println(6055)
fmt.Printf("%#v \n", user)
}
1、初始化数据
2、执行 go run deleteSoft.go
综上,当软删除之后,后面get不到。
******如果记录已经被标记为删除后,要真正的获得该条记录或者真正的删除该条记录,需要启用Unscoped******
id := 1
// 可以获得记录
x.Id(id).Unscoped().Get(user)
fmt.Printf("%#v \n",user)
// 可以真正的删除记录
b,_ := x.Id(id).Unscoped().Delete(user)
fmt.Println(b)