更新动态列数

时间:2016-03-03 01:36:02

标签: scala slick

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

1 个答案:

答案 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))

希望我的回答很有帮助。

相关问题