在Slick案例类中定义多对一引用

时间:2013-05-06 07:11:55

标签: slick

Another question通过在“一个”案例类(Directorate)中定义返回“{1}}”的方法来回答如何定义一对多关联的方法“班级(Seq)。 但它没有解决问题的“双向”部分。

使用这个例子,我想看看如何从另一个方向遍历关联。 而不是

ServiceArea

我想看看

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

Slick有可能吗? 因为当我尝试像

这样的东西时
case class ServiceArea(areaCode: String, directorate: Directorate, name: String)

无法编译,没有找到object ServiceAreas ... def * = areaCode ~ directorate ~ name <> (ServiceArea, ServiceArea.unapply _) 类型的证据参数的隐含值。

1 个答案:

答案 0 :(得分: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

每场比赛将产生一个理事会。