Próbuję wykonać wiele złączeń w wersji Slick 3.1.1. Wynik, który chciałbym osiągnąć to:Scala Slick 3.1 wiele dołączeń
SELECT * FROM customer LEFT JOIN customer_address ON customer.id = customer_address.customer_id LEFT JOIN address ON customer_address.address_id = address.id
Próbowałem następujące:
val query = for {
c <- Customer
ca <- CustomerAddress if ca.customerId === c.id
a <- Address if a.id === ca.addressId
} yield (c, a)
Problem polega na tym, że jeśli klient nie posiada adresu, który nie robi pojawiają się, co ma sens.
Potem próbowałem to:
val query2 = for {
(c, ca, a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id)
} yield (c, a)
Problem polega na tym, że pojawia się błąd na _._2.addressId
ponieważ _._2
jest Rep
przedmiot.
Dokładny błąd:
Error:(21, 110) value addressId is not a member of slick.lifted.Rep[Option[Models.Tables.CustomerAddress]]
(c, ca, a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id)
Auto generowane Slick klasę tabelach: http://pastebin.com/e4M3cGU8
Jak mogę uzyskać wyniki, które chcę z Slick?
Czy możesz dodać błąd, który otrzymałeś? –