登录
首页 >  Golang >  Go问答

GORM 不支持 SQL COALESCE 函数

来源:stackoverflow

时间:2024-03-01 17:36:24 185浏览 收藏

一分耕耘,一分收获!既然都打开这篇《GORM 不支持 SQL COALESCE 函数》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

db.model(&domain.products{}).where("product_code", product.product_code).
updates(map\[string\]interface{}{
"product_image": gorm.expr("coalesce(?, products.product_image)", product.product_image),
"size":          gorm.expr("coalesce(?, products.size)", product.size),
"color":         gorm.expr("coalesce(?, products.color)", product.color),
"unit_price":    gorm.expr("coalesce(?, products.unit_price)", product.unit_price),
"stock":         gorm.expr("coalesce(?, products.stock)", product.stock),
})

这是一个 gorm 查询,用于在我们更新表时管理空值插入。 如果新值(传入值)为空,我想通过保留表中的现有值来更新表。 但在我的代码中,表正常更新,这意味着空值和非空值都正常更新。我希望有人能帮助我

我也尝试过 gorm 原始查询。但它也不起作用

ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)

正确答案


coalesce 返回第一个不是 nil 的参数。

为此,您需要提供指针。但是,正如从评论中的代码片段中看到的那样,没有提供任何指针。因此,所有指定字段都将被更新。

具体来说,您的 products (或在您的程序中调用的任何名称)类型应该看起来更像这样:

package domain

type products struct {
    product_code  int `gorm:"not null"`
    product_image *string
    size          *int
    color         *string
    unit_price    *float64
    stock         *int
}

请注意,字段被定义为指针。

然后它会像这样使用:

newStock := 12
prod := domain.Products{    
    product_code: 42,   
    product_image: nil,     
    size: nil,  
    color: nil,     
    unit_price: nil,    
    stock: &newStock, 
}

正弦所有字段都是 nil,除了 stock 之外,只有 stock 会在数据库中更新。

终于介绍完啦!小伙伴们,这篇关于《GORM 不支持 SQL COALESCE 函数》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>