【问题标题】:gorm: Join with changeable 'where' conditionsgorm:加入可变的“where”条件
【发布时间】:2019-05-02 12:22:04
【问题描述】:

我有两张桌子:演员和电影。我需要通过可更改的过滤器让演员与他们的所有电影 - 他们可以存在或不存在,单个值或可能值的一部分。

我怀疑我让它工作的方式(使用 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

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    这对我来说实际上并不坏。 Gorm 完全公开了一个方法链接接口,因此您可以像这样进行查询构建,所以我根本不会说这是代码异味。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多