GORM:upsert没有插入正确的值

我试图找到一种方法来 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.6


Golang 版本:1.12


Postgres 12


GCT1015
浏览 398回答 1
1回答

慕后森

刚刚遇到了一个类似的问题,当更新引用此关联的模型时,GORM 没有更新关联表的数据(例如:在user具有关联bill模型的表上更新数据,其中bill数据已更改并且预计将沿user' s 保存)。事实证明,GORM 只更新产生关联/外键的字段,而不是实际数据。您需要打开FullSaveAssociations会话选项才能更新所有字段。(见https://gorm.io/docs/session.html#FullSaveAssociations和https://github.com/go-gorm/gorm/issues/3506)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go