2014-02-22 35 views
1

我發現很多關於「舊」AutoInc函數如何工作的舊帖子,但幾乎沒有文章介紹新AutoInc函數的實際工作方式。Slick 2.0 MultiDBCakeExample AutoInc「into」函數

https://github.com/slick/slick-examples/blob/master/src/main/scala/com/typesafe/slick/examples/lifted/MultiDBCakeExample.scala

沒有與用戶和圖片定義了兩個專用自動遞增功能:

private val picturesAutoInc = pictures 
    returning pictures.map(_.id) into { case (p, id) => p.copy(id = id) } 

private val usersAutoInc = users.map(u => (u.name, u.pictureId)) 
    returning users.map(_.id) into { 
    case (_, id) => id 
} 

我發現returning方法上http://slick.typesafe.com/doc/2.0.0/queries.html#inserting

但是,這是什麼into功能?它有什麼作用?它採取什麼措施?

這是我的課程,我應該如何編寫自己的autoInc?

case class Label (id: Option[Int] = None, tag_name: String) 

    class Labels (tag: Tag) extends Table[Label](tag, "Labels") { 
    def id = column[Option[Int]]("TAG_ID", O.PrimaryKey, O.AutoInc) 
    def tag_name = column[String]("TAG_NAME") 

    def * = (id, tag_name) <> (Label.tupled, Label.unapply _) 
    } 

回答

3

它允許您將插入的值和生成的鍵映射到期望的目標值。到目前爲止,這是無證的。我創建了帶有文檔的PR:https://github.com/slick/slick/pull/687

還要注意相應的單元測試:https://github.com/slick/slick/blob/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/InsertTest.scala#L59

+0

如果'的情況下(P,ID)'是插入的值,如果我們將像10多我們該怎麼辦一張大桌子的價值? –

+1

我不確定你瞭解你的問題。你賦予'into'的函數的第一個參數是你賦予插入的光滑值。如果你調用'someTable.insert(a,b,c)',它實際上會自動修改爲'someTable.insert((a,b,c))',這意味着你得到了(a,b,c)作爲價值。希望這回答你的問題。 – cvogt