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 _)
类型的证据参数的隐含值。
答案 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
每场比赛将产生一个理事会。