Về cơ bản, cùng một câu hỏi đã được hỏi về một năm trước cho slick 2.x (scala slick one-to-many collections). Tôi tự hỏi nếu có bất kỳ tiến triển nào được thực hiện với việc phát hành của slick phản ứng.Slick 3.0.0: Cách truy vấn quan hệ một-nhiều/nhiều-nhiều-nhiều
Ví dụ: chúng tôi có ba bảng. library
, book
và library_to_book
nơi thư viện có nhiều sách. Những gì tôi muốn là một danh sách các thư viện với sách của họ. Trong scala này sẽ là một cái gì đó giống như Seq[(Library, Seq[Book])]
. Các truy vấn tôi có là như sau:
val q = (for {
l <- libraries
ltb <- libraryToBooks if l.id === ltb.libraryId
b <- books if ltb.bookId === b.id
} yield (l, b)
db.run(q.result).map(result => ???)
results
trong trường hợp này là loại Seq[(Library, Book)]
. Làm cách nào để thay đổi truy vấn của tôi để nhận được kết quả của loại Seq[(Library, Seq[Book])]
thay thế? Cách "khéo léo" của việc viết các truy vấn như vậy là gì?
Như Sky đã đề cập trước đó trong một bình luận, không có cách nào để làm điều này trong slick atm. Tôi đoán phương pháp '.groupBy' mà bạn đề xuất là cách để đi ngay bây giờ. – Roman
@Roman Điều này có trả lại một 'Seq' trống nếu một thư viện không có bất kỳ cuốn sách nào không? Nếu vậy, nó có thể không hoàn toàn phù hợp với kỳ vọng. – acjay
@acjay: Trong trường hợp đó, điều này dẫn đến một 'Seq' trống rỗng. Nếu bạn muốn có tất cả các thư viện trong kết quả của bạn không có vấn đề nếu họ có sách hay không bạn có thể sử dụng tham gia bên ngoài thay vì tham gia bên trong ('joinLeft',' joinRight' trong điều khoản trơn). Cảm thấy tự do để mở một câu hỏi tiếp theo nếu đây không phải là những gì bạn đang tìm kiếm :) – Roman