我有一个数据库,它的模型看起来像:
case class Data {
id: Int,
value: Json
}
我想创建一个搜索查询,它可以通过csv
:过滤value
JSON中的一些字段
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