在浮油中我有一个看起来像这样的设置:
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
对象中找到任何要覆盖的内容,让我这样做。
欣赏任何可以解决的光。
答案 0 :(得分:3)
您应该做的一件事是将查询定义为简单的Scala表达式/函数:
val disabledUsers = Users.filterNot(_.disabled)
以上只定义了一个过滤掉残疾人的查询。然后,您可以使用更具体的查询在不同的程序点将它组合几次:
disabledUsers.where(_.name === "Fred")
我相信Slick应该足够智能,可以将查询编译并优化为单个SELECT