2016-04-05 23 views
6

Slick 3.1.1'de birden çok bağlantı gerçekleştirmeye çalışıyorum. Ben denedimScala Slick 3.1 çoklu birleştirmeler

SELECT * FROM customer LEFT JOIN customer_address ON customer.id = customer_address.customer_id LEFT JOIN address ON customer_address.address_id = address.id 

aşağıdaki: Ben başarmak istiyorum sonuç şudur

val query = for { 
    c <- Customer 
    ca <- CustomerAddress if ca.customerId === c.id 
    a <- Address if a.id === ca.addressId 
} yield (c, a) 

Buradaki sorun, bir müşterinin bir adresi yoksa değil mi bu yani mantıklı olan görünür.

val query2 = for { 
     (c, ca, a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id) 
    } yield (c, a) 

Buradaki sorun _._2 bir Rep nesnedir çünkü _._2.addressId bir hata alır olmasıdır:

Sonra bu çalıştı.

Tam hatası: http://pastebin.com/e4M3cGU8

nasıl Slick ile istediğiniz sonuçları elde edebilirsiniz:

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) 

Oto Slick Tablolar sınıfını oluşturulan?

+0

Aldığınız hatayı lütfen ekleyebilir misiniz? –

cevap

3

ait // ((c, ca), a).

val query2 = for { 
     ((c, ca), a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.map(_.addressId) === _.id) 
} yield (c, a) 
+0

tarafından otomatik olarak üretildi. Bu doğru cevaptır ancak bu sözdizimi bulantıdır. kayganlığın benim için sorunları çözeceğini düşündüm ama bu gibi hayal kırıklıkları ile karşılaştım. –

1

Çalışması gerekir. yerine de sonuçları harita yapmak zorunda Ne (c, ca, a)

val query2 = for { 
    ((c, ca), a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id) 
} yield (c, a) 
+0

Denedim ama yine de aynı hatayı veriyor –

+0

@JellevanEs 'Tablo' yanlış yapılandırması gibi görünüyor. 'Müşteri', 'MüşteriAdresi' ve 'Adres' tanımlarını paylaşmak mümkün mü? Bu tablo tanımının birindeki 'Seçenek 'i kullanarak kaçırmış gibi görünüyorsun? – TheKojuEffect

+0

Tablo sınıfını ekledim. Onunla bir şeyler yapıp yapamayacağınızı bilmiyorum çünkü bu kayganlık –