1

我可以在不使用普通 SQL 的情况下构建具有可变数量字段的更新查询吗?

例如,单列的更新很简单——我只是让它创建窄查询。

Query(RolesTable).filter((role: RolesTable.type) => role.id === role_id).map((role: RolesTable.type) => role.name).update(name)

但是如果Role有 5 个字段并且我想允许 API 客户端向我发送他想要更新的字段怎么办?我将如何构建这样的查询?

4

1 回答 1

3

~这里的关键是在产生选定列时使用运算符。使用文档中的示例模型:

case class User(id: Option[Int], first: String, last: String)
object UsersTable extends Table[User]("users") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def first = column[String]("first")
  def last = column[String]("last")
  def * = id.? ~ first ~ last <> (User, User.unapply _)
}

基于您的示例的选择如下所示:

val cols = Query(UsersTable).filter((user: UsersTable.type) => user.id === userId).map((user: UsersTable.type) => user.first ~ user.last)

然后update电话将是:

cols.update((newFirst,newLast))

此外,如果您愿意,您可以将您的选择重写为理解,因为它会缩短一点:

val cols = for(user <- UsersTable if (user.id === userId)) yield user.first ~ user.last
cols.update((newFirst,newLast))
于 2013-05-28T12:09:29.713 回答