如何通过Slick Query使用yield?

时间:2013-05-24 23:12:59

标签: scala scala-2.10 slick

如何使用Slick Query的收益率?所以想象我有这样的代码

def rolesQuery(owner_id: UUID) = for {
  (role, rel) <- Roles innerJoin AbilitiesMapping on (_.id === _.obj_id) if rel.owner_id === owner_id.bind
} yield role

我这样使用

val rolesQuery: lifted.Query[Roles.type, Role] = DBManager.rolesQuery(user_id)
rolesQuery.foreach((role: Role) => {
  println(modifiedRole(role))
})

但如果我想生成另一个带有修改角色的容器怎么办?我试过这个

val lst = for (role <- rolesQuery)
  yield modifiedRole(role)

但它在lst中返回WrappingQuery而不是实际的case类对象。我看到有mapResults方法,但它返回UnitInvoker类型的对象而不是Role的容器 - s

我该怎么办?我应该在Query对象上调用.list()吗?

1 个答案:

答案 0 :(得分:0)

是的,如果您想要在理解中处理结果,则需要获取数据,list将完成该操作。就目前而言,你的for-comp似乎只是从一个查询映射到另一个查询:

val lst = for (role <- rolesQuery.list)
  yield modifiedRole(role)

确保您在范围内有隐式Session