2014-02-19 65 views
25

我已經看到了地球的盡頭,爲這個問題的答案。在光滑的2.0上沒有太多的信息。下面是我的地址模型的代碼,如何在插入之後創建返回id的方法?在滑動2.0中插入後返回AutoInc ID

package models 
import play.api.Play.current 
import play.api.db.slick.Config.driver.simple._ 
import play.api.db.slick.DB 

    object Addresses{ 
     val DB_URL:String = "jdbc:h2:mem:fls-play" 
     val DB_driver:String = "org.h2.Driver" 
     class Addresses(tag: Tag) extends Table[(String, String, String, String, String)](tag, "ADDRESSES"){ 
     def id = column[Int]("ID", O.PrimaryKey, O.AutoInc) 
     def city = column[String]("CITY") 
     def stateName = column[String]("STATE_NAME") 
     def street1 = column[String]("STREET1") 
     def street2 = column[String]("STREET2") 
     def zip = column[String]("ZIP") 

     def * = (city, stateName, street1, street2, zip) 
     } 
     val addresses = TableQuery[Addresses] 

     def create(city:String, stateName:String, street1:String, street2:String, zip:String) { 
     DB.withSession{ implicit session => 
      addresses += (city, stateName, street1, street2, zip) 
     } 
     } 
    } 

謝謝!

+0

的可能重複[怎麼辦我使用Scala Slick返回一個序列生成的id(http://stackoverflow.com/questions/19877185/how-do-i-return-an-sequence-generation-for-the-id-using-scala-slick ) – joescii

+2

@barnes jd我認爲這個答案涉及浮油1.0。 –

+0

@MartinKolinek啊的確的確很好。 – joescii

回答

38

嘗試

(addresses returning addresses.map(_.id)) += (city, stateName, street1, street2, zip) 

沒有測試它,但它顯示here

+0

非常感謝,我不能相信我錯過了。 –

+0

@Martin所以你回答了方法調用的正文?你不能使用tupled以某種方式減少代碼嗎?我不喜歡我們如何重複列。希望你能澄清這段代碼實際上在哪裏?這是否與* =方法在同一個位置? – Blankman

+1

@Blankman如果你已經有了一個列的元組,你應該可以使用類似'(add returns add.map(_。id))+ = tuple'的東西。如果那是你所問的。 –

3

如果你有一個默認值的字段,你可以嘗試這個

addresses.map(c => (c.city, c.stateName, c.street1)) returning addresses.map(_.id) += (city, stateName, street1) 
+0

不錯的一個!我一直在尋找這個。謝謝 – brunofitas

相關問題