过滤后但在更新更新/排除字段之前,实体中的光滑更新字段?

时间:2017-07-21 11:42:06

标签: scala playframework slick slick-3.0

在以下功能中,我更新了用户。但是,用户已经创建了一个“创建日期”。将在数据库中的字段,但不会在客户端传递的用户实体中:

def update(user: User): Future[Int] = {
    db.run(
      userTable
        .filter(_.userId === user.userId)
        // Can I set user.createdDate here to the existing value?
        .update(user)
    )
}

是否可以在调用update(user)之前使用db中现有用户行的值设置user.createdDate?

这里参考的是我在创建用户时如何设置createdDate字段(User是一个不可变的case类,所以我做了一个副本来设置createdDate):

def create(user: User): Future[Int] = {
    db.run(userTable += user.copy(
      createdDate = Option(Timestamp.valueOf(LocalDateTime.now()))))
}

2 个答案:

答案 0 :(得分:1)

您可以像这样破坏用户对象并跳过createdDate

userTable
  .filter(_.id === id)
  .map(t => (t.firstName,..., t.modifiedDate))
  .update(("John",..., Some(Timestamp.valueOf(LocalDateTime.now)))) 

答案 1 :(得分:1)

我最后只是在更新前进行了阅读,如下所示:

this.read(user.userId).flatMap {
    case Some(existingUser) =>
        db.run(
            userTable.
            filter(_.userId === user.userId).
            update(user.copy(createdDate = existingUser.createdDate)))
    case None => throw new NotFoundException(...)
}