使用光滑时,如何返回查询结果?我是否返回一个元组,或返回一个查询对象,但是分成多个会话?
这里让我困惑的是:在我的索引控制器中,我创建了数据库连接和隐式会话。
val db = Database.forURL("db.default.url", driver = "db.default.driver")
db.withSession {implicit session => ...}
然后我可以在withSession
容器内查询我的心脏。
db.withSession {implicit session =>
val coolStuff = myStuff.sortBy(_.name).drop(1).take(10).list
}
但是,我不确定如何获得隐式会话的结果 out 。我不能这样做
def index = Action {
val db = Database.forURL("db.default.url", driver = "db.default.driver")
db.withSession {implicit session =>
myStuff.sortBy(_.name).drop(1).take(10).list
}
Ok(views.html.index(myStuff)
}
因为myStuff
不在范围内。我意识到我可以从db.withSession
返回内容:
val coolStuff = db.withSession {implicit session => ..blah }
但是多个查询呢?我应该以元组的形式归还吗?
def index = Action {
val db = Database.forURL("db.default.url", driver = "db.default.driver")
val results = db.withSession {implicit session =>
val myStuff = myStuff.sortBy(_.name).drop(1).take(10).list
val otherStuff = myStuff.filter(_.name != "myname").take(10).list
(myStuff, otherStuff)
}
val myStuff = results(0)
val otherStuff = results(1)
Ok(views.html.index(myStuff)
}
这是正确的方法吗?我很难找到正确的解决方法。
答案 0 :(得分:3)
您可以任意方式退货。一个元组非常好。注意Scala的提取器语法,它可以为您节省一些锅炉。另请注意,可以在withSession块之外指定查询。只有.list或.run需要在里面。
val myStuffQuery = myStuff.sortBy(_.name).drop(1).take(10)
val otherStuffQuery = myStuff.filter(_.name != "myname").take(10)
val (myStuff,otherStuff) = db.withSession {implicit session =>
(myStuffQuery.run, otherStuffQuery.run)
}