У меня есть 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