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, для чего угодно.

Другие вопросы по тегам