问题描述
我在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是否找到了记录