【问题标题】:updating postgres table using gorm使用 gorm 更新 postgres 表
【发布时间】:2019-07-10 07:03:32
【问题描述】:

我在尝试更新表中的行时遇到问题。 我尝试了以下方法:

return ss.db.Where("name = ?", sub.Name).Save(&sub).Error

return ss.db.Save(sub).Error

我也试过这个的变体

s := ss.db.Where("Name = ?", sub.Name)
    return ss.db.Model(&s).Updates(Subscription{Name: sub.Name, DevicesAllowed: sub.DevicesAllowed, Price: sub.Price, Active: sub.Active}).Error

我还尝试了其他几种无效的方法,例如,这种尝试导致所有行都被更改:

return ss.db.Model(&sub).Updates(Subscription{Name: sub.Name, DevicesAllowed: sub.DevicesAllowed, Price: sub.Price, Active: sub.Active}).Error

我这里有其余代码供参考:https://gist.github.com/yshuman1/8a26a90507bc13de7290d3adc0facdd1

任何帮助或建议将不胜感激!谢谢。

【问题讨论】:

  • “这个尝试导致行被改变” 你这是什么意思?更新有效还是无效?如果行发生了变化,那么你的问题就解决了,不是吗?
  • @mkopriva 抱歉错过了一个词……我的意思是“这种尝试导致所有行都被更改”我将编辑帖子以反映这一点。
  • 我看到你试过ss.db.Save(sub),你也试过ss.db.Save(&sub)吗? sub 的值是否正确设置了 ID?在没有首先指定表或模型的情况下调用 db.Where 似乎不是一个好主意。
  • @mkopriva 使用 ss.db.Save(&sub) 创建了一个新行。我修改了我的 db.Where 来指定模型。这是我的最新尝试:gist.github.com/yshuman1/18809f77828d55d15db6da1b0649dc6e 它正确查找行但没有更新任何内容。
  • 我刚刚意识到,我也在保存旧信息,因此我将其更正为 &sub 而不是订阅。所以我稍微编辑了代码,现在它可以工作了。它不漂亮,但它的作品大声笑。这是一个 sn-p:gist.github.com/yshuman1/50045310ef49d69ea7f072f58d760650 非常感谢@mkopriva,如果没有你的帮助,我不会弄明白的。

标签: postgresql go go-gorm


【解决方案1】:

解决方案是在表中找到记录,然后在使用 .Save() 之前用新值替换旧值,如下所示:

func (ss *SubscriptionService) Update(sub *Subscription) error {
    var subscription Subscription
    db := ss.db.Where(&Subscription{Name: sub.Name})
    err := first(db, &subscription)
    if err != nil {
        log.Error("error looking up subscription")
        return err
    }
    subscription.Price = sub.Price
    subscription.Active = sub.Active
    subscription.DevicesAllowed = sub.DevicesAllowed
    return ss.db.Save(&subscription).Error
}

【讨论】:

  • 您是否尝试过在firstSave 中使用sub? IE。 err := first(db, sub),然后是错误检查,然后是 return db.Save(sub).Error,而不进行重新分配?
  • 其实this 之类的东西只要设置了sub 的ID 就足够了。
  • 我尝试了您的后一个建议,它创建了另一行,并忽略了我将 active 更改为 false。 curl -d 'Name=test22&DevicesAllowed=100&Price=15&Active=false' -v localhost:3000/submgr/update 这是表格的屏幕截图imgur.com/jlsy3eM
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2021-12-01
  • 2019-02-06
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多