2015-06-07 28 views
1

我想更新到油滑3.0.0(反應油滑),但我不能得到最基本的東西工作。我可以做一些以前像db.withTransaction { ... },它會運行,但我甚至無法得到這個編譯:油滑3.0.0 - 多個插入取決於彼此與返回值

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,我應該怎麼寫這個所以它編譯?

感謝

回答

1

不知道更多有關架構:

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的確切類型將被退回,因此???。所有內容都包含在各種操作中,因此當您嘗試直接在插入FacebookAuth中使用userId時,這是錯誤的類型。相反,你想要做的是map/flatMap對返回的結果,並撰寫你的更全面的行動。 for {...} yield只是mapflatMap上的糖。然後你的動作run獲得結果的Future。然後,您可以根據需要map

+0

謝謝你的回答!現在我更瞭解如何使用它。謝謝 –