簡體   English   中英

Slick - 在查詢模板中忽略參數

[英]Slick - Parameters are ignored in a Query Template

我正在嘗試編寫一個查詢模板,如下所示:

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

我的查詢模板中缺少什么才能進行正確的查詢?

請嘗試以下語法:

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
}

我希望有幫助......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM