go - gorm:加入可变的“where”条件
问题描述
我有 2 张桌子:演员和电影。我需要通过可更改的过滤器让演员与他们的所有电影 - 他们可以存在或不存在,单个值或可能值的一部分。
我怀疑我让它工作的方式(使用 db 对象)闻起来很糟糕。
有什么建议么?
var (
orderBy string
count uint
where = map[string]interface{}{}
data []ActorsWithFilms
db = ms.db.Table("actor")
)
if filter.ActorName != "" {
where["actor_name"] = filter.ActorName
}
if filter.UpdatedFrom != "" {
db = db.Where("actor.updated_at >= ?", filter.UpdatedFrom)
}
if len(filter.FilmNames) != 0 {
db = db.Where("film.name in (?)", filter.FilmNames)
}
if len(filter.Statuses) != 0 {
db = db.Where("actor.status in (?)", filter.Statuses)
}
err := db.
Joins("join film on film.actorID = actor.id").
Where(where).
Preload("Film").
Order(orderBy).
Limit(filter.GetLimit()).
Offset(filter.Offset).
Find(&data).
Count(&count).
Error
解决方案
这对我来说实际上并不坏。Gorm 完全公开了一个方法链接接口,因此您可以像这样进行查询构建,所以我根本不会说这是代码异味。
推荐阅读
- javascript - 我怎样才能以最少的复杂性获得结果?
- c# - [UWP][XAML] 不显示文本框内容
- python - 检查它们是否相同
- c# - 将 html 解码(例如 > 和 <)转换为普通可读文本(例如 > 和 <)
- hp-nonstop - 如何开始?
- pycharm - Pycharm 控制台输出未完全显示为存储在变量中
- ajax - ExtJS DatePicker 仅通过 Ajax 允许日期
- java - Java Reading From JSON
- tfs - 如何使 TFS 默认包含 bin 和 debug 文件夹
- node.js - 完成所有保存操作后 Mongoose 断开连接