2013-08-30 40 views
19

Đối với việc gia nhập giữa hai bảng được thực hiện nhưnhiều tham gia với trơn

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

Nhưng trong trường hợp nếu tham gia Được yêu cầu giữa bảng hơn đúng cách cố gắng dưới đây nhưng công việc doesnt

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

máy tính được liên kết với nhà cung cấp – dsr301

Trả lời

28

Đầu tiên là những gì tham gia kết quả trong Truy vấn trả về Tuples. Một trong các thành phần tuple có khóa ngoài mà bạn muốn sử dụng cho lần kết nối thứ hai. Bạn cần lấy thành phần này trong điều kiện kết nối thứ hai trước khi nhận được trường của nó. Nếu công ty là bàn, có lĩnh vực này suppId nó sẽ trông như thế này:

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

ở đây bên tráiNhà cung cấp trên (_._ 2.suppId === _.id) có tham gia vào bộ tuple đầu tiên không? trong trường hợp nếu muốn tham gia giữa máy tính và nhà cung cấp, tôi đang thử với các nhà cung cấp leftJoin trên (_._ 1.suppId === _.id) nhưng điều này không thành công – dsr301

+0

Điều này có hiệu quả, nhưng tôi thấy rằng truy vấn đầy đủ với các tham gia phải nằm trong một dòng, nếu không thì hiển thị lỗi biên dịch – dsr301

+0

đã thay đổi câu trả lời thành một dòng – cvogt

5

Tôi nghĩ rằng bạn muốn điều này:

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) 

Tất nhiên, tôi đang làm cho các giả định về mô hình của bạn. Không chắc chắn nếu các nhà cung cấp được liên kết với các công ty hoặc máy tính.

+2

Tôi thích rằng tham gia thứ hai là một dòng riêng biệt trong "hiểu". –

+0

làm thế nào để công ty tham gia vào bên trong? Nó là một loại mô hình? (dòng thứ hai trong vòng lặp) – Setheron

+0

'company' là một trong những định nghĩa trong dòng trước đó. – pedrofurla

Các vấn đề liên quan