21

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

    (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()
  }
4

2 回答 2

36

第一次连接导致查询返回元组。元组组件之一具有您要用于第二个连接的外键。在获取其字段之前,您需要在第二个连接条件中获取此组件。如果 Companies 是表,则具有 suppId 字段,它看起来像这样:

(for {
  ((computer, company),suppliers) <- Computers leftJoin Companies on (_.companyId === _.id) leftJoin Suppliers on (_._2.suppId === _.id)
  if computer.name.toLowerCase like filter.toLowerCase()
} yield ... )
于 2013-08-31T12:37:53.407 回答
4

我想你想要这个:

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)

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

于 2013-09-01T07:16:26.330 回答