2

別の質問は、「多」クラス ( ) のDirectorateを返す「1」ケース クラス ( ) でメソッドを定義することによって、1 対多関連付けを定義する方法に答えます。しかし、質問の「双方向」の部分には対応していません。SeqServiceArea

その例を使用して、関連付けを別の方向からトラバースする方法を確認したいと思います。それ以外の

case class ServiceArea(areaCode: String, dirCode: String, name: String)

が見たいです

case class ServiceArea(areaCode: String, directorate: Directorate, name: String)

これはSlickで可能ですか?私が何かをしようとすると

object ServiceAreas ...
  def * = areaCode ~ directorate ~ name <> (ServiceArea, ServiceArea.unapply _)

type の証拠パラメーターの暗黙的な値が見つからず、コンパイルに失敗しますTypeMapper[ForeignKeyQuery[ServiceAreas,ServiceArea]]

4

1 に答える 1

7

考え方を少し調整する必要があります。Slick はクエリの構成と実行を処理しますが、コメントで述べたように、それは ORM ではありません (ありがたいことに)。

参照したコードを見てください。

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は、ナビゲート可能な外部キーによって既に定義されています。

これで、次のようなクエリを作成できます。

   def directorates = for {
    area <- Parameters[String]
    sa <- ServiceAreas if sa.areaCode === area
    dir <- sa.directorate
  } yield dir

これにより、試合ごとに総局が作成されます。

于 2013-06-11T07:19:18.773 に答える