【发布时间】: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