1

db 側の 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, password)

于 2013-10-30T06:59:28.110 に答える