1

要使用 db side autoinc id,大多数事情建议使用没有 id 的自定义(forInsert)投影,现在我想使用相同的投影进行更新,但我不知道如何(或者是否可能)

class Users extends Table[User]("user") {
   def id = column[UserId]("id", O.PrimaryKey, O.AutoInc)
   def email = column[String]("email")
   def password = column[String]("password")

   def * = id.? ~ email ~ password <>(User, User.unapply _)

   def forInsert = email ~ password <>( {
     (email, password) => User(None, email, password)
   }, {
     u: User => Some((u.email, u.password))
   })

   def uniqueEmail = index("idx_email", email, unique = true)
 }

这可以让你做

Users.forInsert.insert(User(None, "foo", "bar"))

现在给定一个 id 和一个 User 我可以更新一行而不必在 User 中设置 id 吗?

Query(Users).filter(_.id == id).magic(Users.forInsert).update(User(None, "foo", "bar"))

4

1 回答 1

0

您不能重用插入投影,但您可以轻松定义更新投影并执行。

Users.filter(_.id === id).map(p => p.email ~ p.password).update(email, 密码)

于 2013-10-30T06:59:28.110 回答