【问题标题】:Scala : retrieve mutliple values from a urlScala:从 url 检索多个值
【发布时间】:2016-04-02 00:09:07
【问题描述】:

我是 Scala 世界和 Play 框架的新手。在我的 scala 模型中,我能够基于 GET 方法从 url 获取值。一些值来自单选,而其他值来自多选。对于单选,我知道如何检索单个值,但如何从多选中检索值? :

我的网址如下所示:?authorId=1&booksId=1,4,6&section=1

val params = request.queryString.map { case (k, v) => k -> v(0) }

然后我检索值并在数据库中获取它们:

...

(c.authorId === params.get("authorId ").?) and //from a single select : it works
(c.booksId in params.get("booksId").?) and // from a multiple select : i dont know how since i cannot use a string !

params.get("booksId") 包含我的 ids = 1,4,6

列表

如何使用 in 语句在我的数据库中获取 booksId?

PS:我正在使用 Squeryl

谢谢

【问题讨论】:

  • 你在使用 slick 吗?您是否只是尝试使用 in 而不是 select?
  • 我正在使用 squeryl。我试过: (c.booksId in params.get("booksId").toString.split(",").toList) 但没用:(
  • 我记录了 booksId 参数的输出,我得到:Some(1,4,6),也许这就是我没有工作的原因?

标签: scala playframework


【解决方案1】:

params.get 返回一个Option[String],所以你不能直接在params.get("booksId") 的结果上调用String 方法。相反,您需要映射选项:

params.get("booksId").map { booksId =>
  val bookIds = booksId.split(",").toList
  c.booksId in bookIds
}

这将返回一个 Option[WhateverSquerylReturns]。要获取已定义的 Option 的值,请参阅 Option.getOrElse。

【讨论】:

  • 这是一个好的开始 msiebert,但我不能在我的查询中使用您的语法,因为它说:类型不匹配,预期:logicalBoolean,acutal:Option[InclusionOperator]:c.authorId === params.get( "authorId ").?) 和 ( params.get("booksId").map { booksId => val bookIds = booksId.split(",").toList c.booksId in bookIds })
  • 您也应该将您的 authorId 查询逻辑移动到地图正文中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2016-08-30
  • 1970-01-01
  • 2023-04-02
  • 2020-08-20
  • 1970-01-01
相关资源
最近更新 更多