【问题标题】:How write effective save and update function in beego?如何在beego中编写有效的保存和更新功能?
【发布时间】:2020-09-29 02:00:59
【问题描述】:

我在 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

【问题讨论】:

  • 为什么models.Dummy{Id: 10} 带有'Id'(大写),而if d.id == 0 { 则检查id(小写)?在这个Dummy 结构中必须同时存在Idid。如果是这样,那么id 总是等于0,因为您只定义了Id
  • 这是错字。已编辑

标签: go beego


【解决方案1】:

您需要先加载记录。您缺少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方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2012-02-13
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多