1

where是否可以在 Slick或filter语句中使用外键字段?

类似的东西(其中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
4

1 回答 1

2

是的,身份证很好。

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
于 2014-03-26T00:38:23.723 回答