映射查询值后Scala Slick过滤器

时间:2018-05-30 08:54:17

标签: scala slick

在按ID执行Slick查询之前,有没有办法将id(从外部哈希值转换为数据库主键id)转换。对于其他光滑的查询,我可以覆盖案例类apply / unapply以在外部和内部ID之间进行映射。但是,当使用filter()通过ID查询时,在调用filter之前,我不知道没有映射的任何方法。

val res = items.filter(i => i.id === itemId)

这里itemId是外部可见ID,而不是存储在数据库中的id值。想知道TableQuery是否可以扩展并在调用filter之前更改id值。

希望这个问题有道理。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

type ItemId = String

  implicit def ItemIdToRepInt(itemId: ItemId): Rep[Int] = {
    itemId.toInt*2 // We let the implicit conversion provided by slick from Int to Rep[Int] occur here
  }

  val itemId: ItemId = "1"

  db.run(MyTable.filter(i => i.id === itemId).result) //will filter on id = 2

希望对你有意义: - )

此外,如果ItemId实际上是Int,则需要更准确地从Item转换为Rep [Int],否则您将进入无限循环的隐式转换。