光滑的我可以使用映射投影进行更新吗?

时间:2013-10-29 13:01:24

标签: slick

要使用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中设置id吗?

查询(用户).filter(_。id == id).magic(Users.forInsert).update(用户(无,“foo”,“bar”))

1 个答案:

答案 0 :(得分:0)

您无法重复使用插入投影,但您可以轻松定义更新投影并执行。

Users.filter(_。id === id).map(p =&gt; p.email~p.password).update(email,password)