是否可以通过 slick 3.0 更新变量列列表,哪个数字仅在运行时知道?
下面是我想要做的示例(不会编译)
var q: Query[UserTable, UserTable#TableElementType, Seq] = userTable
var columns = List[Any]()
var values = List[Any]()
if (updateCommands.name.isDefined) {
columns = q.name :: columns
values = updateCommands.name.get :: values
}
if (updateCommands.surname.isDefined) {
columns = q.surname :: columns
values = updateCommands.surname.get :: values
}
q = q.filter(_.id === updateCommands.id).map(columns).update(values)
最佳答案
这是我在 Slick 3.1 中所做的。我不确定更糟的是,编辑纯 SQL 语句或多个查询。所以我决定采用后者,假设 Postgres 优化器会看到相同的 WHERE
单个事务的更新查询中的子句。我的更新方法看起来像这样
def updateUser(user: User, obj: UserUpdate): Future[Unit] = {
val actions = mutable.ArrayBuffer[DBIOAction[Int, NoStream, Write with Transactional]]()
val query = users.withFilter(_.id === user.id)
obj.name.foreach(v => actions += query.map(_.name).update(v))
obj.email.foreach(v => actions += query.map(_.email).update(Option(v)))
obj.password.foreach(v => actions += query.map(_.pwdHash).update(Option(encryptPassword(v))))
slickDb.run(DBIO.seq(actions.map(_.transactionally): _*))
}
关于scala - Slick 3.0 如何更新变量列列表,只有在运行时才知道哪个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464435/