2

另一个问题回答了如何定义一对多关联,方法是在“一个”案例类 ( Directorate) 中定义一个返回Seq“多”类 ( ServiceArea) 的 a 的方法。但它没有解决问题的“双向”部分。

使用该示例,我想看看如何从另一个方向遍历关联。代替

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 的 evidence 参数的隐式值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 回答