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._,但我不知道为什么。我也使用代码生成器。

提前致谢!

4

2 回答 2

2

这是因为该~方法已移出Slick 2.0 的正常导入范围。您可以使用元组,就像这样:

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))
于 2014-06-12T02:25:12.403 回答
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 以及任何东西脱糖。

于 2014-06-12T10:04:26.570 回答