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 ответа
Это потому что ~
метод был перемещен из обычной области импорта для 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))
В дополнение к ответу Шона Виейры:
for (user <- Users if user.id === id) yield (user.name, user.city)
это просто синтаксический сахар для
Users.filter(_.id === id).map(u => (u.name, u.city))
и это не специфично для Slick, это компилятор Scala, который desugars это для Scala-коллекций, для Slick, для чего угодно.