我的UserDAO类中有一个更新函数,它带有一些可选值:
def update(id: Int, name: Option[String], password: Option[String], age: Option[Int])
我知道如何更新所有值:
val query = for {
u <- users if u.id === id
} yield (u.name, u.password, u.age)
db.run(query.update(name.get, password.get, age.get))
但是想要有条件地更新不同的列,具体取决于是否定义了它们的Option值。也许是这样的事情:
val query = for {
u <- users if u.id === id
} yield (u.name if name.isDefined, u.password if password.isDefined, u.age if age.isDefined) // Pseudo code
db.run(query(update(...)) // Unpack arguments here
答案 0 :(得分:0)
对于光滑的3,你可以尝试这样,
val query = for {
u <- db.run(users.filter(_.id === id).result)
u1 = if(u.nonEmpty && u.head.name.isDefined){
u.head.copy(name = u.head.name) //add more if needed
}
else
{
u
}
res <- db.run(users.update(u1))
} yield res
for slick 2不需要for-yield
val u = db.run(users.filter(_.id === id).result)
val u1 = if(u.nonEmpty && u.head.name.isDefined){
u.head.copy(name = u.head.name) //add more if needed
}
else
{
u
}
val res = db.run(users.update(u1))
希望我的回答很有帮助。