Scala,Quill-如何在Quill查询中使用SQL IN子句



我有一个数据库,它的模型看起来像:

case class Data {
id: Int, 
value: Json
}

我想创建一个搜索查询,它可以通过csv:过滤valueJSON中的一些字段

def search(id: Int) = {
....
val list = List("value1", "value2", "value3")
quote(
myTable.filter( t => t.id == lift(id)))
.dynamic
.filter(_ => liftQuery(list).contains(infix""" t.name """.pure.as[Boolean]))
}

问题是它不太好用。我不知道如何用其他方式使用IN子句。value是一个包含字段name的JSON,现在我想搜索myTable中适合list中传递的值的所有元素。我也试着做一些类似的事情:

infix""" t.name in ${list.mkString(",")} """.pure.as[Boolean]

但它也没有奏效。你能帮我解决一些问题吗?在quill文档中没有IN子句的好例子。

quote(query[Data].filter(d => liftQuery(list).contains(infix"value->>'name'")))

结果在:

SELECT d.id, d.value FROM data d WHERE value->>'name' IN (?, ?, ?)

https://scastie.scala-lang.org/t4YItAweTna6P5dEw1JRTg

最新更新