I know I can update two columns in Slick 2.0 with:
val q = for (user <- Users if user.id === id) yield (user.name, user.city)
q.update((newName, newCity))
But I've seen something like this working as well which is IMO much nicer syntax:
Users.filter(_.id === id).map(u => u.name ~ u.city).update(newName, newCity)
This gives me the following error:
value ~ is not a member of shortcut.db.Tables.profile.simple.Column
I have imported PostgresDriver.simple._ and I just can't figure out why. I also use the code generator.
Thanks in advance!
That is because the ~
method was moved out of the normal import scope for Slick 2.0. You can either use a tuple, just as is:
Users.filter(_.id === id).map(u => (u.name, u.city)).update((newName, newCity))
or import the necessary TupleMethods object:
import scala.slick.util.TupleMethods._
Users.filter(_.id === id).map(u => u.name ~ u.city).update((newName, newCity))
In addition to Sean Vieira's answer:
for (user <- Users if user.id === id) yield (user.name, user.city)
is just syntactic sugar for
Users.filter(_.id === id).map(u => (u.name, u.city))
and that's not Slick-specific, it's the Scala compiler that desugars this for Scala-collections, for Slick, for anything.