插入或进入Slick 3

时间:2015-08-30 19:02:10

标签: scala slick-3.0

我试图插入如果不存在,并获取行,如果它存在。 我想出了这个:

def saveOrGet(u: User) = (for {
  userGet <- get(u.name).map(r => (r.id, r.active)).result.headOption
  id <- save(u) if userGet.isEmpty
} yield {
  userGet match {
    case Some((id, active)) => (User(Some(id), u.name, active), false)
    case None               => (User(Some(id), u.name, u.active), true)
  }
}).transactionally

private def get(name: String) = users.filter(_.name === name).take(1)

private def save(u: User) = users returning users.map(_.id) += u

修改

经过一些修改,现在我得到了:

java.util.NoSuchElementException: Action.withFilter failed

此致

1 个答案:

答案 0 :(得分:0)

尝试使用case _,因为似乎可能有空的而不是None

userGet match {
    case Some((id, active)) => (User(Some(id), u.name, active), false)
    case _                  => (User(Some(id), u.name, u.active), true)
}