2015-04-12 33 views
-1

如何在使用浮油時返回查詢結果?我是否返回一個元組,或者返回一個查詢對象,但分成多個會話?如何從Slick查詢中返回多個項目?

以下是我困惑的事情:在我的索引控制器中,我創建了數據庫連接和隱式會話。

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 
} 

不過,我不知道如何得到這一結果出來的隱含的會話。我不能這樣做

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) 
} 

這是正確的做法嗎?我很難找出正確的解決方法。

回答

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) 
} 
+0

非常好的解釋。謝謝! – user3308774

+0

如何使用第一個查詢中的值作爲第二個參數? – bashan