0

如何在Slick Query中使用 yield ?所以想象我有这样的代码

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)

但它返回WrappingQuerylst不是实际的案例类对象。我看到有mapResults方法,但它返回UnitInvoker类型的对象而不是Role-s的容器

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

4

1 回答 1

0

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

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

只要确保你有一个隐含Session的范围。

于 2013-05-24T23:43:16.223 回答