使用可选列更新Scala Slick行
我有一个包含多列的光滑表,我想根据用户输入更新其中的一些列。我的桌子看起来像这样:使用可选列更新Scala Slick行,scala,playframework,slick,slick-3.0,Scala,Playframework,Slick,Slick 3.0,我有一个包含多列的光滑表,我想根据用户输入更新其中的一些列。我的桌子看起来像这样: 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",
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"))
}
case class User(
id: Long,
name: String,
email: String,
phone: String,
passwordHash: String,
createdAt: Timestamp)
case class UserUpdate(
id: Long,
name: Option[String],
email: Option[String],
phone: Option[String],
passwordHash: Option[String])
我正在使用slick with Play,所以我想我应该基于用户提供的可选json字段构建一个更新案例类,如下所示:
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"))
}
case class User(
id: Long,
name: String,
email: String,
phone: String,
passwordHash: String,
createdAt: Timestamp)
case class UserUpdate(
id: Long,
name: Option[String],
email: Option[String],
phone: Option[String],
passwordHash: Option[String])
如何创建一个灵活的3.1查询来更新此更新对象中类型为
Some(value)
的字段 正如@insan-e所建议的,您可以通过userUpdate.id
获取existingUser
,并使用existingUser.field.getOrElse(existingUser.field)
进行更新
目前,使用slick api在单个更新查询中不可能做到这一点,这是一个已知的您可以获取旧的
oldUser:User
记录,并执行UserUpdate.field.getOrElse(oldUser.field)
@insan-e是的,这可以工作,但需要两个查询(选择,然后更新)。我想在一个更新查询中完成它。看起来这是目前可用的最好的方法。