【问题标题】:Slick 2.0 - update two or more columnsSlick 2.0 - 更新两列或更多列
【发布时间】:2014-06-12 18:04:26
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: postgresql scala slick slick-2.0


    【解决方案1】:

    这是因为 ~ 方法是 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))
    

    【讨论】:

      【解决方案2】:

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

      for (user &lt;- Users if user.id === id) yield (user.name, user.city)

      只是

      的语法糖

      Users.filter(_.id === id).map(u =&gt; (u.name, u.city))

      这不是特定于 Slick 的,它是 Scala 编译器为 Scala 集合、Slick 以及任何东西脱糖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        • 2018-09-25
        • 2013-05-21
        • 1970-01-01
        • 2021-07-13
        • 2013-04-15
        • 1970-01-01
        相关资源
        最近更新 更多