我正在尝试编写一个类似的查询模板:
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
我的查询模板中缺少什么才能进行正确的查询?
答案 0 :(得分: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
}
我希望有帮助...