Я использую SLICK 1.0.0-RC2. Я определил следующие две таблицы: Директорат и ServiceArea, в которых у Директората есть отношения "один-много" с 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 _)
}
Чтобы класс case Directoration был полезен в моей форме приложения Play, я пытаюсь переопределить класс Case Management, чтобы иметь Seq of ServiceAreas, связанные с этим Управлением.
case class Directorate(dirCode: String, name: String, serviceAreas: Seq[ServiceArea])
Теперь моя проблема связана с проекцией таблицы директората. Я попытался создать метод в директивах:
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 только в одном направлении.
Мне кажется разумным, что для класса Case Directorat является полезным доменным объектом, который должен иметь возможность содержать связанные службы ServiceAreas.
Мне интересно, как я должен пересекать обратную связь, чтобы проекция стола директората работала.