У меня есть следующий метод, который фактически обновляет строку базы данных по таблице. Сначала он проверяет запись, если она существует с определенным условием, и только если она существует, она обновляет соответствующую строку. Таким образом, в базе данных есть два вызова. Я хотел бы избежать двух вызовов, отправленных в базу данных. Так вот код:Slick 3.0 Update Row на основе условия
def confirmUserRegistration(hash: String) = async {
val query = UserRegistrationTable.registrationForHash(hash)
val isRowAvailable = await(database.run(query.result.headOption))
if (isRowAvailable.isDefined) {
// do the update
} else {
// do nothing and return
}
}
UserRegistrationTable.registrationForHash (хэш) запрос выглядит следующим образом:
object UserRegistrationTable {
val all = TableQuery[UserRegistrationTable]
val registrationForHash = (hash: String) => {
all.filter(_.registrationHash === hash)
}
}
Так как я могу оптимизировать обслуживание выпустить только один вызов к базе данных?
EDIT: обновление с обратной связью, заданной ниже сообщение:
Вот как мой метод выглядит:
def confirmUserRegistration(hash: String) = async {
val query = {
UserRegistrationTable.registrationForHash(hash)
.map(_.hasUserConfirmed)
.update(true)
}
val isUpdated: Int = await(database.run(query))
}
Так что если ни одно средство из строк были обновлены, значение для Int было бы 0? – sparkr
Это правильно. Имейте в виду, что это 'DBIO [Int]', поэтому вам нужно сначала 'db.run (...)' it, а затем 'map' over' Future' –
Я использую макрос Scala async. Я обновил свой пост. Посмотрите на это и дайте мне знать, если это звучит хорошо. – sparkr