首页 文章

Slick - 在查询模板中忽略参数

提问于
浏览
5

我正在尝试编写一个查询模板,如下所示:

val byIdentifier = for {
  (identifier, issuer) <- Parameters[(String, String)]
  o <- Objects if (o.identifier === identifier) && (o.identifierIssuer === issuer)
} yield o

然后像这样使用它:

def findByIdentifier(id: String, issuer: String): Option[Object] = 
  byIdentifier(id, issuer).firstOption

Objects 是一个带有提升嵌入的表:

case class Object(val identifer: String, val identifierIssuer: String)

object Objects extends Table[Object]("objects") {
  def identifier = column[String]("identifier")
  def identifierIssuer = column[String]("identifier_issuer")
  ...
}

我遇到的问题是 findByIdentifier("asdf", "weqr") 生成一个带有 where 子句的查询,该子句只是 false

select ... from "objects" where false

我的查询模板中缺少什么才能进行正确的查询?

1 回答

  • 1

    请尝试以下语法:

    val byIdentifier = for {
      (identifier, issuer) <- Parameters[(String, String)]
      o <- Objects
      if o.identifier === identifier
      if o.identifierIssuer === issuer
    } yield o
    

    我经常发现光滑的语法可能有点不稳定,而且目前的文档并不是特别好 .

    你也可以让你的 findByIdentifier 做的工作:

    def findByIdentifier(id: String, issuer: String): Option[Object] = {
        Query(Object).where(_.identifier === id).where(_.identifierIssuer === issuer).run.headOption
    }
    

    我希望有帮助......

相关问题