我正在使用 SLICK 1.0.0-RC2。我定义了以下两个表 Directorate 和 ServiceArea,其中 Directorate 与 ServiceArea 具有一对多关系
case class Directorate(dirCode: String, name: String)
object Directorates extends Table[Directorate]("DIRECTORATES") {
def dirCode = column[String]("DIRECTORATE_CODE", O.PrimaryKey)
def name = column[String]("NAME")
def * = dirCode ~ name <> (Directorate, Directorate.unapply _)
}
case class ServiceArea(areaCode: String, dirCode: String, name: String)
object ServiceAreas extends Table[ServiceArea]("SERVICE_AREAS") {
def areaCode = column[String]("AREAE_CODE", O.PrimaryKey)
def dirCode = column[String]("DIRECTORATE_CODE")
def name = column[String]("NAME")
def directorate = foreignKey("DIR_FK", dirCode, Directorates)(_.dirCode)
def * = areaCode ~ dirCode ~ name <> (ServiceArea, ServiceArea.unapply _)
}
为了使 Directorate 案例类在我的 Play 应用程序表单中有用,我尝试重新定义 Directorate 案例类以具有与该 Directorate 相关的 ServiceAreas序列。
case class Directorate(dirCode: String, name: String, serviceAreas: Seq[ServiceArea])
我的问题现在与理事会表投影有关。我试图在 Directorates 中创建一个方法:
def serviceAreas = (for { a <- ServiceAreas
if (a.dirCode === dirCode)
} yield (a)).list map {
case t: ServiceArea => t
}
这样我就可以尝试类似
def * = dirCode ~ name ~ serviceAreas <> (Directorate, Directorate.unapply _)
但这不能行不通,因为 serviceAreas 只有一种方式。
在我看来,Directorate 案例类是一个有用的域对象,它应该能够包含相关的 ServiceAreas,这似乎是合理的。
我想知道我应该如何遍历反向关系,以便理事会表投影能够工作。