美文网首页
xorm - 软删除

xorm - 软删除

作者: Uzero | 来源:发表于2017-12-24 18:16 被阅读0次

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

    相关文章

      网友评论

          本文标题:xorm - 软删除

          本文链接:https://www.haomeiwen.com/subject/kzyhgxtx.html