假设我有一些沿着于
db.Where("id = ? AND name = ?", 20, "Zack"}.First(&user)
有没有一种方法可以将它分解,使它更像这样(这是伪代码)?
db.Where("id = ? AND name = ?")
db.PrepareNextStatement(20).PrepareNextStatement("Zack").First(&user)
基本上,我正在处理一个条件数量可变的查询,因此在某些情况下,我希望按id
进行过滤,有时按name
进行过滤,有时候两者都有。如果我想让它更灵活(比如说添加一个type
过滤器)如果有一些代码,我可以将其作为一个条件进行附加,那就太好了(有一些函数生成"id = ? AND ..."
字符串,还有一些函数运行可变数量的PrepareNextStatement
调用)。
我试过构建字符串并调用Raw
,显然这是可行的,但容易出现安全问题。需要使用预准备语句。
1条答案
按热度按时间nfs0ujit1#
您可以将
struct
、slice
或map
传递给db.Where
请查看https://gorm.io/docs/query.html#Struct-amp-Map-Conditions或者利用https://gorm.io/docs/method_chaining.html