Update更新方法

Update用于数据的更新,往往需要结合DataWhere方法共同使用。Data方法用于指定需要更新的数据,Where方法用于指定更新的条件范围。同时,Update方法也支持直接给定数据和条件参数。

使用示例:

也可以直接给Update方法传递datawhere参数:

  1. // UPDATE `user` SET `name`='john guo' WHERE name='john'
  2. g.Model("user").Update(g.Map{"name" : "john guo"}, "name", "john")
  3. g.Model("user").Update("name='john guo'", "name", "john")
  4. // UPDATE `user` SET `status`=1 WHERE 1
  5. g.Model("user").Update(g.Map{"status" : 1}, 1)

Counter更新特性

可以使用Counter类型参数对特定的字段进行数值操作,例如:增加、减少操作。

  1. // Counter is the type for update count.
  2. type Counter struct {
  3. Value float64
  4. }

Counter使用示例,字段自增:

Counter也可以实现非自身字段的自增,例如:

  1. updateData := g.Map{
  2. "views": &gdb.Counter{
  3. Field: "clicks",
  4. Value: 1,
  5. },
  6. }
  7. // UPDATE `article` SET `views`=`clicks`+1 WHERE `id`=1
  8. result, err := db.Update("article", updateData, "id", 1)

Increment/Decrement自增/减

我们可以通过IncrementDecrement方法实现对指定字段的自增/自减常用操作。两个方法的定义如下:

  1. // Increment increments a column's value by a given amount.
  2. func (m *Model) Increment(column string, amount float64) (sql.Result, error)
  3. // Decrement decrements a column's value by a given amount.

使用示例:

RawSQL语句嵌入

  1. // UPDATE `user` SET login_count='login_count+1',update_time='now()' WHERE id=1
  2. g.Model("user").Data(g.Map{
  3. "login_count": "login_count+1",
  4. "update_time": "now()",
  5. }).Where("id", 1).Update()
  6. // 执行报错:Error Code: 1136. Column count doesn't match value count at row 1

使用gdb.Raw改造后:

  1. // UPDATE `user` SET login_count=login_count+1,update_time=now() WHERE id=1
  2. g.Model("user").Data(g.Map{
  3. "login_count": gdb.Raw("login_count+1"),
  4. "update_time": gdb.Raw("now()"),
  5. }).Where("id", 1).Update()

Delete删除方法

Delete方法用于数据的删除。

使用示例:

也可以直接给Delete方法传递where参数:

  1. // DELETE FROM `user` WHERE `uid`=10
  2. g.Model("user").Delete("uid", 10)

软删除特性