使用外键字段在Slick中过滤

时间:2014-03-23 10:33:23

标签: scala slick slick-2.0

是否可以在Slick wherefilter声明中使用外键字段?

类似的地方(user字段是表的外键,User是其映射投影)(这不会编译):

def findByUser(user: User)(implicit s: Session): Option[Token] =
    tokens.where(_.user === user).firstOption

或者我们应该明确地使用外键吗?

def findByUser(user: User)(implicit s: Session): Option[Token] =
    tokens.where(_.userId === user.id).firstOption

1 个答案:

答案 0 :(得分:2)

是的,ids很好。

def findByUserId(userId: Long)(implicit s: Session): Option[Token] =
    tokens.filter(_.userId === userId).firstOption

findByUserId( user.id )

这允许使用该方法,即使您拥有的唯一内容是id。 Slick故意暴露关系模型(具有功能性触摸)并且不隐藏它,除了其他原因,因为使用id而不是对象引用允许引用仅仅通过其id加载到内存中的行。

甚至更好更简单,因为内置于Slick:

val findByUserId = tokens.findBy(_.userId) // pre-compiles SQL for better performance
findByUserId(user.id).firstOption