如何在Slick TableQuery对象上默认应用过滤器?

时间:2015-04-24 16:56:26

标签: scala slick typesafe typesafe-stack

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

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对象中找到任何要覆盖的内容,让我这样做。

欣赏任何可以解决的光。

1 个答案:

答案 0 :(得分:3)

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

val disabledUsers = Users.filterNot(_.disabled)

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

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

我相信Slick应该足够智能,可以将查询编译并优化为单个SELECT