SLICK 1.0.0-RC2 を使用しています。次の 2 つのテーブル Directorate と ServiceArea を定義しました。ここで、Directorate は ServiceArea と 1 対多の関係にあります。
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 のSeqを持たせようとしています。
case class Directorate(dirCode: String, name: String, serviceAreas: Seq[ServiceArea])
私の問題は、Directorate テーブル プロジェクションにあります。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 を含めることができる必要があるというのは、私には理にかなっているように思えます。
Directorate テーブル プロジェクションが機能するように、逆の関係をどのようにトラバースする必要があるのか 疑問に思っています。