使用可选列更新 Scala Slick 行
Update Scala Slick rows with optional columns
我有一个包含多列的 Slick Table,我想根据用户输入更新其中一些列。我的 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
案例 class 看起来像这样:
case class User(
id: Long,
name: String,
email: String,
phone: String,
passwordHash: String,
createdAt: Timestamp)
我在 Play 中使用 slick,所以我想我应该根据用户提供的可选 json 字段构建一个更新案例 class,如下所示:
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 在单个更新查询中执行此操作,这是已知的 issue
我有一个包含多列的 Slick Table,我想根据用户输入更新其中一些列。我的 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
案例 class 看起来像这样:
case class User(
id: Long,
name: String,
email: String,
phone: String,
passwordHash: String,
createdAt: Timestamp)
我在 Play 中使用 slick,所以我想我应该根据用户提供的可选 json 字段构建一个更新案例 class,如下所示:
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 在单个更新查询中执行此操作,这是已知的 issue