与光滑的多个连接

dsr*_*301 20 scala slick

对于两个表之间的连接是这样的

    (for {
    (computer, company) <- Computers leftJoin Companies on (_.companyId === _.id)
    if computer.name.toLowerCase like filter.toLowerCase()
    }
Run Code Online (Sandbox Code Playgroud)

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

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

cvo*_*ogt 31

第一个连接导致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 ... )
Run Code Online (Sandbox Code Playgroud)