使用SQL JOIN语法而不是Slick 2.0中的WHERE进行过滤

时间:2014-02-16 11:24:01

标签: scala slick

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数据库变得有趣:)

1 个答案:

答案 0 :(得分:0)

您可以将它们设为方法或功能。我们将在Scala Days 2013和Scala eXchange 2013会谈中解释如何执行此操作。幻灯片和视频可在此处获取:http://slick.typesafe.com/docs/