### 軟刪除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)
// 此時將可以真正的刪除記錄
~~~