【发布时间】:2021-08-10 18:18:19
【问题描述】:
我正在尝试对我的 Postgres 数据库动态运行查询,但无法完全理解它。
我正在寻找的解决方案是一种我可以动态设置查询的解决方案,也许通过在整个代码中将参数附加到最终查询,然后只执行一个查询实例。
正如标题中提到的,我正在使用 SQLBoiler 与 Postgres 进行交互。
这是我在伪代码中寻找的内容:
final_query := QueryMod{
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
}
if a == 1 {
final_query = append(final_query, And(" and mt_important = ?", bool(false)))
} else {
final_query = append(final_query, And(" and mt_ness = ?", bool(true)))
}
res_mt_count, err := models.MTs(
final_query,
).All(CTX, DB)
感谢一路上的任何帮助! :)
【问题讨论】:
-
您在尝试使用真实代码实现伪代码时遇到了什么问题?
-
运行上面的代码时出现以下错误:
invalid composite literal type qm.QueryModon linefinal_query := QueryMod{。 -
QueryMod是一个接口类型,所以是的,该表达式是非法的。如果你想要一个类型的切片,你只需要在该类型前面加上[]。例如final_query := []QueryMod{Where(...)}. -
我试过了,但后来在
res_mt_count, err := models.MTs(行上出现以下错误cannot use final_query (type []qm.QueryMod) as type qm.QueryMod in argument to models.MTs。知道如何前进吗? -
您可以声明一个实现
QueryMod接口的自定义切片类型。然后使用它而不是[]QueryMod{...}或继续使用[]QueryMod但将final_query转换为声明的切片类型,然后再将其传递给MTs。或者,您也可以重新定义MTs以接受[]QueryMod而不仅仅是QueryMod。
标签: postgresql go sqlboiler