如何在beego中编写有效的保存和更新功能?

问题描述

我在BaseModel中具有以下功能,可以在任何地方使用。

func (d *Dummy) Save() (int64,error) {
    o := orm.NewOrm()
    var err error
    var count int64
    if d.Id == 0 {
        count,err = o.Insert(d)
    } else {
        count,err = o.Update(d)
    }

    return count,err
}

我正在这样使用

d := models.Dummy{Id: 10}
d.someValue = "x"
d.Save()

问题是我已经在数据库中使用值“ d.OtherValue”。 执行此功能后,它将更新为0。
由于它是对所有模型都有效的通用模型函数,我该如何解决?基本上,我想在单个查询中执行此操作,就像update / Save Django ORM

解决方法

您需要先加载记录。您缺少Read(&struct) ORM方法:

o := orm.NewOrm()
d := models.Dummy{Id: 10}

readErr:= o.Read(&d)

// check if the record with Id of 10 exists and update...
if readErr!= o.ErrNoRows {
    if rowsAffected,err := o.Update(&d); err == nil {
        // record updated (rowsAffected indicates the number of affected rows)
    }
} else {
    // record does not exist,create a new one
    id,insertErr:= o.Insert(&d)
    if insertErr== nil {
        // success
    }
}
     

然后您应该检查ORM是否找到了记录

有关更多详细信息,您可以参考ReadUpdate方法。