在 gorm 处使用“IN”的 where 子句的双括号

2024年 2月 10日 87.1k 0

在 gorm 处使用“in”的 where 子句的双括号

php小编新一为您带来gorm的一个重要特性——在gorm中使用"IN"的where子句的双括号。这个特性可以让我们更方便地查询多个值是否在某个字段中,简化了查询语句的编写,提高了代码的可读性和可维护性。通过使用双括号,我们可以在where子句中传入一个切片,其中包含了需要查询的值,gorm会自动将其转换为"IN"子句来执行查询操作。这个特性在实际开发中非常实用,帮助我们更高效地处理复杂的数据查询需求。

问题内容

我正在使用 where 子句通过 gorm 更新数据库中的值

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN (?)", ids).Updates(users)

ids 是 ids 的一部分,用户是结构

问题是我收到此错误

错误1241(21000):操作数应包含1列

gorm生成的sql就是这个。看起来它创建了一个双括号,导致了这个错误。但我不知道如何解决这个问题

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 20:39:40.904' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))

登录后复制

编辑 1

我从 (?) 中删除 () 也有同样的效果

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN ?", ids).Updates(users)

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 21:18:46.537' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))

登录后复制

错误1241(21000):操作数应包含1列

解决方法

我在这里找到了答案https://github.com/go-gorm/ gorm/issues/5014 和 https://gorm.io/docs/sql_builder。 html#子句

使用这个子句我可以做这样的事情

query.Clauses(
clause.Where{
Exprs: []clause.Expression{
clause.Expr{
SQL: "id IN ?",
Vars: []interface{}{ids},
WithoutParentheses: true,
},
},
},
)

登录后复制

以上就是在 gorm 处使用“IN”的 where 子句的双括号的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论