修改
01 普通用法
- 修改全部字段
DB.sava(&book)
package mian
func main(){
var book Book
DB.Where("id=?", 1).First(&book)
book.Name := "name"
book.Message := "is cool"
book.Price := 0 // 是零值,也会被修改
DB.Save(&book)
fmt.Println(book)
}
注意:
零值也会被修改
- 指定字段字段修改
Update
方法,必须指定条件
package mian
func main(){
var book Book
DB.Where("id=?", 1).First(&book)
book.Name := "name"
book.Message := "is cool"
book.Price := 0 // 是零值不会被修改
DB.Model(&book).Where("id=?", id).Update("name", name, "message", message, "price", priceInt) // 可以跟多个要修改的数据
fmt.Println(book)
}
注意:
零值不会被修改
必须要有Model
update
参数类型可以是:struct
和map
Select()
Omit()
// Select 和 Map
// User's ID is `111`:
db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18, "actived": false})
// UPDATE users SET name='hello' WHERE id=111;
db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "hello", "age": 18, "actived": false})
// UPDATE users SET age=18, actived=false, updated_at='2013-11-17 21:34:10' WHERE id=111;
// Select 和 Struct (可以选中更新零值字段)
db.Model(&result).Select("Name", "Age").Updates(User{Name: "new_name", Age: 0})
// UPDATE users SET name='new_name', age=0 WHERE id=111;
02 钩子函数
在特定条件下,自动触发
BeforeSave
、BeforeUpdate
、AfterSave
、AfterUpdate
func (u *Book) BeforeUpdate(tx *gorm.DB) (err error) { // 在更新book表数据之前
if u.Role == "admin" {
return errors.New("admin user not allowed to update")
}
return
}