我有一个包含多列的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)
类型的字段?
答案 0 :(得分:0)
正如@ insan-e建议的那样,您可以按existingUser
抓取userUpdate.id
并使用existingUser.field.getOrElse(existingUser.field)
进行更新。
现在使用光滑的api无法在单个更新查询中执行此操作,这是一个已知的issue