Slick 3.0.0 -多个插入依赖于返回值



我正在尝试更新到Slick 3.0.0 (reactive Slick),但是我不能得到最基本的东西工作。之前我可以做像db.withTransaction { ... }这样的东西,它会运行,但是我甚至不能让这个编译:

def insertNewFacebookUser(
  facebookId: String,
  email: String,
  firstName: String,
  lastName: String
) = {
  val user =
  (Users.map(u ⇒ (u.email, u.firstName, u.lastName)) returning Users) +=
    ((email, firstName, lastName))
  FacebookAuths.map(f ⇒ (f.userId, f.facebookId)) += ((user.id, facebookId))
  user
}

这只是抱怨user.id被包裹在一些DBIOAction中,我该如何写它才能编译?

谢谢

在不了解更多模式的情况下:

def insertNewFacebookUser(
  facebookId: String,
  email: String,
  firstName: String,
  lastName: String
): DBIOAction[???, ???, ???] = for {
      userId <- Users returning Users.map(_.id) += (email, firstName, lastName)
       _     <- FacebookAuths += (userId, facebookId)
    } yield (User(userId, email, firstName, lastName))
val user: Future[User] = db.run(insertNewFaceBookUser(....)

我不确定DBIOAction的确切类型将返回,因为它取决于您的模式,因此是???。一切都包装在各种各样的行动,所以当你试图使用userId直接插入到facebook的auth,这是错误的类型。相反,您要做的是对返回的结果执行map/flatMap,并编写更完整的操作。for {...} yield只是mapflatMap上的糖。然后,您将run您的行动,以获得您的结果的Future。然后你可以根据需要设置map

最新更新