2015-05-08 10 views
5

Slick'i (Scala fonksiyonel ilişkisel model) anlamaya çalışıyorum. Slick 3.0.0'da bir prototip oluşturmaya başladım ama elbette ... belgelerin çoğu ya güncel değil ya da eksik.Slick/Scala: Bir Rep nedir [Bağış] ve nasıl bir değere dönüştürüyorum?

Bir şema oluşturabildiğim ve bir nesneyi veritabanından döndürebildiğim bir noktaya ulaşmayı başardım.

Sorun şu ki, geri döndüğüm şey bir "Rep [Bind]" ve geri dönmeyi beklediğim nesne değil. Bu değeri ne yapacağımı anlayamıyorum. Örneğin, rep.countDistinct.result gibi bir şey denerseniz, bir çökme olur. Ben Rep nesnesi ve ben herhangi net bir açıklama bulamıyorum "kakışıyor" için bir yol bulamıyorum

class UserModel(tag: Tag) extends Table[User](tag, "app_dat_user_t") { 
    def id = column[Long]("n_user_id", O.PrimaryKey) 
    def created = column[Long]("d_timestamp_created") 

    def * = (id.?, created) <> (User.tupled, User.unapply) 
} 

case class User(id: Option[Long], created: Long) 

val users = TableQuery[UserModel] 

(users.schema).create 

db.run(users += User(Option(1), 2)) 

println("ID is ... " + users.map(_.id)) // prints "Rep[Bind]"... huh? 

val users = for (user <- users) yield user 

println(users.map(_.id).toString) // Also prints "Rep[Bind]"... 

: Burada

bazı kısalık için kaldırıldı kod hızlı bir sinopsis ... var ne olduğu ya da nasıl kullanılacağı.

+0

Sadece biraz daha bilgi kaldırabilirsiniz: Ben ettik belgelerin çoğu "users.foreach (println)" gibi bir şey yapabildiğime dair öneriler buldum, ancak users.foreach undefined. – Zac

cevap

7

Rep [], kaygan olarak kullanılan Column [] veri türünün yerine geçmiştir.

users.map (_. Id)

val result : Rep[Long] = users.map(_.id) 

users.map(_.id) // => select n_user_id from app_dat_user_t; 

elde edilen değer, tip sütun tüm sıraları için sütun ('n_user_id') arasında döner değerleri [uzun] [ şimdi Rep [Uzun]].

var idList : List[Long] = List() 
users.map(_.id).forEach(id => 
idList = idList :+ id 
) 
: doğrudan aşağıda olarak yazdırmak daha sonra herhangi bir scala toplama Çeşidi olmadığından şu ilk olarak bazı scala koleksiyonu dönüştürebilirsiniz

  • yukarıdaki Resultset değerlerini yazdırmak ve olamaz

    println (idList) başka bir kez

  • tüm kimlikleri basılmak istendiğinde ** // sadece kullanabilirsiniz:

    users.map(_.id).forEach(id => 
    println(id) 
    ) // print for each id 
    

Ve

val users = TableQuery[UserModel] // => returns Query[UserModel, UserModel#TableElementType, Seq]) 

val users = for (user <- users) yield user // => returns Query[UserModel, UserModel#TableElementType, Seq]) 

ikisi de aynı anlama, Yani doğrudan eski kullanabilir ve ikincisi

İlgili konular