Xorm 删除数据

Xorm 删除数据使用 Delete 方法,参数为struct的指针并且成为查询条件。

user := new(User)
affected, err := engine.Id(id).Delete(user)

Delete的返回值第一个参数为删除的记录数,第二个参数为错误。

注意:当删除时,如果user中包含有bool,float64或者float32类型,有可能会使删除失败。具体请查看本教程的 FAQ。

 

2. 软删除 Deleted

软删除 Deleted 可以让您不真正的删除数据,而是标记一个删除时间。使用此特性需要在xorm标记中使用deleted标记,如下所示进行标记,对应的字段必须为time.Time类型。

type User struct {
    Id int64
    Name string
    DeletedAt time.Time `xorm:"deleted"`
}

在Delete()时,deleted标记的字段将会被自动更新为当前时间而不是去删除该条记录,如下所示:

var user User
engine.Id(1).Get(&user)
// SELECT * FROM user WHERE id = ?
engine.Id(1).Delete(&user)
// UPDATE user SET ..., deleted_at = ? WHERE id = ?
engine.Id(1).Get(&user)
// 再次调用Get,此时将返回false, nil,即记录不存在
engine.Id(1).Delete(&user)
// 再次调用删除会返回0, nil,即记录不存在

那么如果记录已经被标记为删除后,要真正的获得该条记录或者真正的删除该条记录,需要启用Unscoped,如下所示:

var user User
engine.Id(1).Unscoped().Get(&user)
// 此时将可以获得记录
engine.Id(1).Unscoped().Delete(&user)
// 此时将可以真正的删除记录

Xorm 支持原生 SQL 查询、添加、更新和删除等操作。 1. 执行SQL查询:Xorm 可以直接执行一个SQL查询,即Select命令。在Postgres中支持原始SQL语句中使用 ` 和 ? 符号 ...