【发布时间】:2014-02-23 07:34:22
【问题描述】:
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.?) ...
提前致谢。
干杯, 抢。
附言光滑是真棒!它确实让使用 SQL 数据库再次变得有趣:)
【问题讨论】: