【问题标题】:How can I apply a filter by default on a Slick TableQuery object?默认情况下,如何在 Slick TableQuery 对象上应用过滤器?
【发布时间】:2015-04-24 16:56:26
【问题描述】:

在 slick 中,我有一个看起来像这样的设置:

class Users(tag: Tag) extends Table(tag) {
  def name = column[String]
  def disabled = column[Boolean]
  def * = ...
}

object Users extends TableQuery(new Users(_)) {}

我想要的是任何时候有人使用Users 对象来查询数据库,它不包括禁用用户。例如:

Users.where(_.name === "Fred")

执行:

select * from users where name = 'Fred' and disabled = false

这可能吗?我似乎无法在 TableQuery 对象中找到任何可以覆盖的内容来让我执行此操作。

欣赏任何可以阐明这一点的光。

【问题讨论】:

    标签: scala slick typesafe typesafe-stack


    【解决方案1】:

    您应该能够做的一件事是将查询定义为简单的 Scala 表达式/函数:

    val disabledUsers = Users.filterNot(_.disabled)
    

    上面只定义了一个过滤掉残疾人的查询。然后,您可以在不同的程序点将其与更具体的查询组合多次:

    disabledUsers.where(_.name === "Fred")
    

    我相信 Slick 应该足够聪明,可以将查询编译和优化为单个 SELECT

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 2022-12-11
      • 1970-01-01
      • 2011-01-12
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 2020-05-27
      相关资源
      最近更新 更多