我在 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。
由于它是对所有模型都有效的通用模型函数,我该如何解决这个问题?基本上,我想在单个查询中执行此操作,就像更新/保存 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 是否找到了一条记录更多详情可以引用Read和 Update方法。
关于go - beego中如何编写有效的保存和更新功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64111834/