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._ и просто не могу понять, почему. Я также использую генератор кода.

Заранее спасибо!


person Johan S    schedule 12.06.2014    source источник


Ответы (2)


Это связано с тем, что метод ~ был выведен за пределы обычной области импорта для Слик 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))
person Sean Vieira    schedule 12.06.2014

В дополнение к ответу Шона Виейры:

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

person cvogt    schedule 12.06.2014