xorm - 软删除

2017-12-24  本文已影响0人  Uzero

在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)

上一篇下一篇

猜你喜欢

热点阅读