Fondamentalmente è stata fatta la stessa domanda circa un anno fa per slick 2.x (scala slick one-to-many collections). Mi chiedo se non sia stato fatto alcun progresso con il rilascio di chiazze reattive.Slick 3.0.0: come eseguire query relazioni uno-a-molti/molti-a-molti
Diciamo per esempio che abbiamo tre tabelle. library
, book
e library_to_book
dove una biblioteca ha molti libri. Quello che voglio è un elenco di biblioteche con i loro libri. In scala questo sarebbe qualcosa come Seq[(Library, Seq[Book])]
. La query che ho è il seguente:
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
in questo caso è di tipo Seq[(Library, Book)]
. Come devo modificare la mia query per ottenere invece un risultato di tipo Seq[(Library, Seq[Book])]
? Qual è il "modo lucido" di scrivere tali query?
Come Sky ha menzionato in precedenza in un commento, non c'è modo di farlo in una bella atmosfera. Immagino che il metodo '.groupBy' che hai proposto sia la strada da percorrere per ora. – Roman
@Roman Questo restituisce un 'Seq' vuoto se una libreria non ha libri? Se è così, potrebbe non essere all'altezza delle aspettative. – acjay
@acjay: In questo caso ciò porta a un 'Seq' vuoto in effetti. Se vuoi avere tutte le librerie nel tuo risultato, non importa se hanno libri o no, puoi usare outer join invece di inner join ('joinLeft',' joinRight' in termini slick). Sentiti libero di aprire una domanda successiva se questo non è quello che stai cercando :) – Roman