2013-04-28 50 views
1

我想爲使用SLICK創建的模型編寫findById(pk:Long)和update()函數。然而,在我的findById方法中,它表示返回一個編譯錯誤「值過濾器不是對象models.About的成員」,並在findById方法中突出顯示模型名稱About。Play Framework:無法使用SLICK編寫findById函數

package models 

//import scala.slick.driver.PostgresDriver.simple._ 
import play.api.db.slick.Config.driver._ 


case class About(
    id:Option[Long], 
    name: String, 
    subheading: String, 
    about: String 
) 

object About extends Table[About]("about"){ 
    def id = column[Long]("id", O.PrimaryKey, O AutoInc) 
    def name = column[String]("name") 
    def subheading = column[String]("subheading") 
    def about = column[String]("about") 

    def * = id.? ~ name ~ subheading ~ about <> (About.apply _, About.unapply _) 

    def update(id: Long, about: About)(implicit session: Session) = findById(id).update(about) 

    def findById(pk: Long) = 
     for (a <- About if a.id === pk) yield a 

} 

回答

3

替換爲您findById:

def findById(pk: Long) = 
    for (a <- Query(About) if a.id === pk) yield a 

也許你會不得不增加import simple._司機進口之下。

+0

非常感謝,這完美地工作。你知道爲什麼在大多數例子中Query()是不需要的嗎?謝謝 – TrueWheel 2013-04-28 20:08:10

+1

其實我從來不在乎學習爲什麼。 – pedrofurla 2013-04-28 20:34:23

1

此外,您還可以使用這個方法太:

def findById(id: Int) = { 
    byId(id).list.headOption 
} 

import scala.slick.jdbc.{ GetResult, StaticQuery }

+0

感謝您的答覆和替代答案。不幸的是,它不適合我。我已經看到這在其他地方使用,但似乎無法解決爲什麼不適合我。 – TrueWheel 2013-04-29 21:35:05

+0

@TrueWheel你收到什麼樣的錯誤? – 2013-04-30 04:11:52

相關問題