与光滑的多个连接

时间:2013-08-30 16:52:25

标签: scala slick

两个表之间的连接就像

一样
    (for {
    (computer, company) <- Computers leftJoin Companies on (_.companyId === _.id)
    if computer.name.toLowerCase like filter.toLowerCase()
    }

但是如果需要在更多表之间加入,那么尝试下面的方法是正确的,但是不起作用

   (for {
    (computer, company,suppliers) <- Computers leftJoin Companies on (_.companyId ===        _.id)
     //not right leftjoin Suppliers on (_.suppId === _.id)
    if computer.name.toLowerCase like filter.toLowerCase()
  }

2 个答案:

答案 0 :(得分:30)

第一个连接导致Query返回元组。其中一个元组组件具有您要用于第二个连接的外键。在获取其字段之前,您需要在第二个连接条件中获取此组件。如果公司是表格,那么该字段就会显示如下:

(for {
  ((computer, company),suppliers) <- Computers leftJoin Companies on (_.companyId === _.id) leftJoin Suppliers on (_._2.suppId === _.id)
  if computer.name.toLowerCase like filter.toLowerCase()
} yield ... )

答案 1 :(得分:3)

我想你想要这个:

for {
    (computer, company) <- Computers leftJoin Companies on (_.companyId === _.id)
    (supp, _) <- company innerJoin Suppliers on (_.suppId === _.id)
    if computer.name.toLowerCase like filter.toLowerCase()
} yield (computer, company, supp)

当然,我正在对你的模型做出假设。不确定供应商是否与公司或计算机相关联。