我试图找到一种方法来 UPSERT 一些值,但我得到了一些意想不到的行为。例如:db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "name"}}, DoUpdates: clause.AssignmentColumns([]string{"name", "email"}),})退货ON CONFLICT (name) DO UPDATE SET name = {excluded name %!s(bool=false)}, email = {excluded email %!s(bool=false)} RETURNING *,这似乎不对。我还尝试构建名称和表达式的地图:values := map[email:excluded.email name:excluded.name col3:table.col3+excluded.col3]db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "name"}}, DoUpdates: clause.Assignments(values),})产生DO UPDATE SET "email"='excluded.email',"name"='excluded.name'但我希望DO UPDATE SET "email"="excluded.email","name"="excluded.name"戈姆版本:v1.20.6Golang 版本:1.12Postgres 12
1 回答

慕后森
TA贡献1802条经验 获得超5个赞
刚刚遇到了一个类似的问题,当更新引用此关联的模型时,GORM 没有更新关联表的数据(例如:在user
具有关联bill
模型的表上更新数据,其中bill
数据已更改并且预计将沿user
' s 保存)。
事实证明,GORM 只更新产生关联/外键的字段,而不是实际数据。您需要打开FullSaveAssociations
会话选项才能更新所有字段。(见https://gorm.io/docs/session.html#FullSaveAssociations和https://github.com/go-gorm/gorm/issues/3506)
- 1 回答
- 0 关注
- 397 浏览
添加回答
举报
0/150
提交
取消