我刚刚开始使用光滑,并发现自己编写了常见查询的重复代码。人们用什么技术在模型之间共享常见查询?例如,在扩展Table [SomeOtherType]的MyModel对象中,我可能有类似的东西:
def all : List[SomeOtherType] = DB.withSession { implicit session : Session =>
(for(record <- MyModel) yield record).list
}
这样我就可以写MyModel.all
了。如何使用此行为扩展所有表?
答案 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更容易(在我看来是有意义的)。