使用可选列更新Scala Slick行

时间:2017-04-11 18:29:01

标签: scala playframework slick slick-3.0

我有一个包含多列的Slick Table,我想根据用户输入更新其中一些列。我的表看起来像这样:

class Users(_tableTag: Tag) extends Table[User](_tableTag, "users") {
  def * = (id, name, email, phone, passwordHash, createdAt) <> (User.tupled, User.unapply)

  val id: Rep[Long] = column[Long]("id", O.AutoInc, O.PrimaryKey)
  val name: Rep[String] = column[String]("name")
  val email: Rep[String] = column[String]("email")
  val phone: Rep[String] = column[String]("phone")
  val passwordHash: Rep[String] = column[String]("password_hash")
  val createdAt: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]
      ("created_at", SqlType("TIMESTAMP NOT NULL DEFAULT current_timestamp"))
}

User案例类如下所示:

case class User(
  id: Long,
  name: String,
  email: String,
  phone: String,
  passwordHash: String,
  createdAt: Timestamp) 

我正在使用Play,所以我想我会根据用户提供的可选json字段构建一个更新案例类,如下所示:

case class UserUpdate(
  id: Long,
  name: Option[String],
  email: Option[String],
  phone: Option[String],
  passwordHash: Option[String])

如何制作一个光滑的3.1查询来更新此更新对象中Some(value)类型的字段?

1 个答案:

答案 0 :(得分:0)

正如@ insan-e建议的那样,您可以按existingUser抓取userUpdate.id并使用existingUser.field.getOrElse(existingUser.field)进行更新。

现在使用光滑的api无法在单个更新查询中执行此操作,这是一个已知的issue