beego 如何实现orm更新部分字段


使用beego的orm更新单条数据库记录,如果只传入单个参数会将其他没传入的字段置空,文档上说可指定更新字段( http://beego.me/docs/mvc/model/object.md )


 // 只更新 Name 
o.Update(&user, "Name") 
// 指定多个字段 
// o.Update(&user, "Field1", "Field2", ...) 
现在的问题是:如何获取到更新的字段 field1,field2 
controller中通过 c.Ctx.Request.Body 获取的body是 
{ 
"aa": "234234", 
"bb": "sdfg", 
"cc": "23423", 
"dd": "sss"

}

如何提取出 aa ,bb,dd ……( 不确定列数 )然后将提取的数组作为更新的特定字段

beego

F@ukTDN 10 years, 4 months ago

大哥,请认真阅读官方文档好不,这种问题真心就不应该拿来问,官方文档对于这种问题已经说得很明白了:

第一个返回值为影响的行数


 go


 o := orm.NewOrm()
user := User{Id: 1}
if o.Read(&user) == nil {
    user.Name = "MyName"
    if num, err := o.Update(&user); err == nil {
        fmt.Println(num)
    }
}

Update 默认更新所有的字段,可以更新指定的字段:


 go


 // 只更新 Name
o.Update(&user, "Name")
// 指定多个字段
// o.Update(&user, "Field1", "Field2", ...)
...

认真看 o.Update 的第一个参数,那是一个 指针 ,意思是你直接把值赋值给 user 变量,等于是临时修改了 user 变量的属于值,然后把这个 user 变量的指针直接传递给 o.Update 参数, orm 会直接找到 user 对应的记录,更新 o.Update 后面的几个参数指定的字段。也就是你直接在 o.Update 之前,直接:


 go


 user.xxx = aa
user.ooo = bb
user.ppp = cc

之后直接调用 o.Update 方法即可。

地址: http://beego.me/docs/mvc/model/object.md#update

B力ZERO answered 10 years, 4 months ago

Your Answer