PHP小编新一在这里为大家介绍一下sql中的COALESCE函数。COALESCE函数用于返回参数列表中的第一个非NULL值。然而,需要注意的是,在使用GORM(Go语言的ORM框架)
PHP小编新一在这里为大家介绍一下sql中的COALESCE函数。COALESCE函数用于返回参数列表中的第一个非NULL值。然而,需要注意的是,在使用GORM(Go语言的ORM框架)时,COALESCE函数可能会出现一些问题。这是因为GORM对于查询语句的处理方式与传统的SQL语句有所不同。因此,如果你在使用GORM时遇到了COALESCE函数的问题,可能需要考虑其他的解决方案。
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
会在数据库中更新。
以上就是SQL COALESCE 函数不适用于 GORM的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: SQL COALESCE 函数不适用于 GORM
本文链接: https://lsjlt.com/news/563130.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0