如何从 Slick 查询中 return 多个项目?
How do you return multiple items from a Slick query?
如何在使用 slick 时 return 处理查询结果?我是 return 一个元组,还是 return 一个查询对象,但拆分成多个会话?
这让我感到困惑:在我的索引控制器中,我创建了数据库连接和隐式会话。
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
不在范围内。我意识到我可以 return 来自 db.withSession
的东西:
val coolStuff = db.withSession {implicit session => ..blah }
但是多个查询呢?我应该 return 他们在一个元组中吗?
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)
}
这是正确的做法吗?我真的很难找到解决这个问题的正确方法。
您可以return任何您喜欢的方式。元组非常好。请注意 Scala 的提取器语法,它可以为您节省一些锅炉空间。另请注意,可以在 withSession 块之外指定查询。只有 .list 或 .运行 需要在里面。
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)
}
如何在使用 slick 时 return 处理查询结果?我是 return 一个元组,还是 return 一个查询对象,但拆分成多个会话?
这让我感到困惑:在我的索引控制器中,我创建了数据库连接和隐式会话。
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
不在范围内。我意识到我可以 return 来自 db.withSession
的东西:
val coolStuff = db.withSession {implicit session => ..blah }
但是多个查询呢?我应该 return 他们在一个元组中吗?
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)
}
这是正确的做法吗?我真的很难找到解决这个问题的正确方法。
您可以return任何您喜欢的方式。元组非常好。请注意 Scala 的提取器语法,它可以为您节省一些锅炉空间。另请注意,可以在 withSession 块之外指定查询。只有 .list 或 .运行 需要在里面。
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)
}