在光滑的模型中共享常见查询?

时间:2013-11-20 04:56:44

标签: playframework-2.0 slick

我刚刚开始使用光滑,并发现自己编写了常见查询的重复代码。人们用什么技术在模型之间共享常见查询?例如,在扩展Table [SomeOtherType]的MyModel对象中,我可能有类似的东西:

def all : List[SomeOtherType] = DB.withSession { implicit session : Session =>  
  (for(record <- MyModel) yield record).list
}

这样我就可以写MyModel.all了。如何使用此行为扩展所有表?

1 个答案:

答案 0 :(得分:0)

我们在Scala Days 2013演讲http://slick.typesafe.com/docs/#20130612_slick_vs_orm_scaladays_2013中讨论这个问题。

您必须定义将查询作为参数的函数(或方法扩展/隐式类)。

def all[T, E](q: Query[Any, E]) = db.withSession { implicit session: Session =>
  q.list
}

// usage in Slick 1.0
all(Query(MyModel))

如果您正考虑将其作为表对象的成员,我建议您不要这样做。这将使迁移到2.0更容易(在我看来是有意义的)。