2013-11-14 12 views
5

Sto cercando di scrivere un modello di query per questo modo:Slick - I parametri vengono ignorati in un modello di query

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

E poi usare in questo modo:

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

Objects è una tabella con incorporamento sollevato:

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") 
    ... 
} 

Il problema che ho riscontrato è che findByIdentifier("asdf", "weqr") produce una query con un where clausola che è solo false:

select ... from "objects" where false 

Quello che mi manca nel mio modello di query per avere una corretta esecuzione di query?

+0

Questo può o non può fare la differenza. Hai provato a usare 'is' invece di' === 'nelle condizioni del filtro? –

risposta

1

provare la seguente sintassi:

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

spesso trovo che chiazza di petrolio può essere un po 'traballante con la sua sintassi e la documentazione corrente non è particolarmente buona.

Si potrebbe anche fare il vostro findByIdentifier fare il lavoro:

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

Mi auguro che aiuta ...

Problemi correlati