如何使用Slick Lifted Embedding更新多个列?

exp*_*ert 46 scala scala-2.10 slick

如何使用Slick Lifted Embedding更新多个列?这份文件并没有多说.

我希望它是这样的

Query(AbilitiesTable).filter((ab: AbilitiesTable.type) => ab.id === ability_id).map((ab: AbilitiesTable.type) => (ab.verb, ab.subject)).update("edit", "doc")
Run Code Online (Sandbox Code Playgroud)

exp*_*ert 75

我想到了.它应该是这样的

val map = Query(AbilitiesTable)
  .filter(_.id === ability_id)
  .map(ab => ab.verb ~ ab.context)

map.update(("", ""))
Run Code Online (Sandbox Code Playgroud)

Typesafe,为什么你的文档如此糟糕?我几乎每一件傻事都要谷歌,或者通过单位测试挖几个小时.请改进它.谢谢.

  • 请注意,这仅适用于可更新的ResultSet,后者要求您包含ID.如果您尝试使用此而不在构建的查询中包含ID字段,则它将失败. (10认同)

nem*_*moo 69

使用Slick 2.x和3.x,这种写作方式有效:

Users.filter(_.id === filterId)
     .map(x => (x.name, x.age))
     .update(("john", 99))
Run Code Online (Sandbox Code Playgroud)

如果要更新多个属性,请小心记住额外的括号,否则可能会收到编译器警告.

  • 在intellij逗号可能无法正常工作.你可以选择这样写(x.name~x.age) (3认同)
  • 在Intellij 2016版本中,逗号似乎工作正常. (2认同)