2013-10-29 46 views
0

要使用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和一个用户我可以不必设置用户ID更新行?

查询(用户).filter(_。ID == ID).magic(Users.forInsert).update(用户(无, “富”, “酒吧”))

+0

我没有找到官方文档中的任何实例关于使用映射投影进行更新 –

回答

0

您不能重复使用刀片投影,但您可以轻松定义更新投影并执行。

Users.filter(_。ID === ID).MAP(P => p.email〜p.password).update(电子邮件,密码)