gpt4 book ai didi

scala - 更新动态列数

转载 作者:行者123 更新时间:2023-12-05 01:20:21 27 4
gpt4 key购买 nike

我的 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))

但是想要有条件地更新不同的列,这取决于它们的选项值是否被定义。也许是这样的:

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

最佳答案

对于slick 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

对于 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))

希望我的回答对您有所帮助。

关于scala - 更新动态列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com