0

我正在尝试对我的 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)

感谢一路上的任何帮助!:)

4

1 回答 1

3

mkopriva 通过以下解决方案解决了我的问题:

type QueryModSlice []qm.QueryMod

func (s QueryModSlice) Apply(q *queries.Query) {
    qm.Apply(q, s...)
}

func main() {
    mods := QueryModSlice{
        qm.Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
    }

    if a == 1 {
        mods = append(mods, qm.And(" and mt_important = ?", bool(false)))
    } else {
        mods = append(mods, qm.And(" and mt_ness = ?", bool(true)))
    }

    res_mt, err := models.MTs(mods).All(CTX, DB)

}

非常感谢!:)

于 2021-08-11T19:35:37.023 回答