Slick 2.0 - 更新两列或更多列

时间:2014-06-12 00:40:53

标签: postgresql scala slick slick-2.0

我知道我可以使用以下方法更新Slick 2.0中的两列:

val q = for (user <- Users if user.id === id) yield (user.name, user.city)
q.update((newName, newCity))

但我已经看到类似这样的东西,这是IMO更好的语法:

Users.filter(_.id === id).map(u => u.name ~ u.city).update(newName, newCity)

这给了我以下错误:

value ~ is not a member of shortcut.db.Tables.profile.simple.Column

我已导入PostgresDriver.simple._而我无法弄清楚原因。我也使用代码生成器。

提前致谢!

2 个答案:

答案 0 :(得分:2)

这是因为Slick 2.0的~方法为moved out of the normal import scope。你可以使用元组,就像那样:

Users.filter(_.id === id).map(u => (u.name, u.city)).update((newName, newCity))

或导入必要的TupleMethods对象:

import scala.slick.util.TupleMethods._
Users.filter(_.id === id).map(u => u.name ~ u.city).update((newName, newCity))

答案 1 :(得分:1)

除了肖恩·维埃拉的回答:

for (user <- Users if user.id === id) yield (user.name, user.city)

只是

的语法糖

Users.filter(_.id === id).map(u => (u.name, u.city))

并且它不是特定于Slick的,它是Scala编译器,它为Scala集合,Slick,以及其他任何东西都是荒谬的。