Slick 2.0中有没有办法在表类上创建一个方法,它生成一个SQL JOIN语法而不仅仅是一个WHERE子句?
使用类似于文档的示例:
class Suppliers(tag: Tag) extends Table[(Int, String)](tag, "SUPPLIER") {
...
def suppliedCoffees = coffees.filter(_.supplierId == id)
def * = (id, name)
}
class Coffees(tag: Tag) extends Table[(Int, Int, String)](tag, "COFFEES") {
...
def * = (id, supplierId, name)
}
我可以创建suppliedCoffees
方法并按原样使用它:
for {
s <- suppliers
c <- s.suppliedCoffees
} yield (s.name, c.name) ...
漂亮又整洁 - 易于阅读,并且隐藏了很好的连接标准。但是这会生成一个SQL WHERE子句。我怎样才能做类似以下的事情,但是使用类似suppliedCoffees
的方法,以便将它封装在类中?
for {
(s, c) <- suppliers innerJoin coffees on (_.id === _.supplierId)
} yield (s, c) ...
或者更好的是,我该如何进行外连接? (但作为像suppliedCoffees
)
for {
(s, c) <- suppliers leftJoin coffees on (_.id === _.supplierId)
} yield (s.name, c.name.?) ...
提前致谢。
干杯, 罗布。
P.S。光滑真棒!它确实使得再次使用SQL数据库变得有趣:)
答案 0 :(得分:0)
您可以将它们设为方法或功能。我们将在Scala Days 2013和Scala eXchange 2013会谈中解释如何执行此操作。幻灯片和视频可在此处获取:http://slick.typesafe.com/docs/