2016-04-26 7 views
2

Ich muss einen Filter auf ein Attribut einer optionalen Tabelle anwenden, die von einer linken Verknüpfung in scala slick erstellt wurde. Ich konnte zu dieser oder ähnlichen Fragen keine Dokumentation online finden.So filtern Sie eine optionale Tabelle, die von einem linken Join in slick erstellt wurde

Betrachten Sie die folgende Abfrage:

val query = FirstTable joinLeft SecondTable on (_.foreignId === _.id) 

I ist durch ein Attribut des SecondTable filtern möchten:

query.filter { 
    case (firstTable, secondTableOpt) => secondTableOpt.attribute === "value" 
} 

Offensichtlich ist dies nicht kompiliert, da secondTableOpt ein Rep[Option[SecondTable]] ist. Es scheint keine .get Methode auf dem Rep Objekt zu geben.

Es sollte eine Möglichkeit geben, dies in slick zu schreiben, weiß jemand, wie man das erreicht?

Danke

+0

Warum Sie nicht filtern 'SecondTable' vor dem Join? –

+0

Naja, weil ich vorher gar nicht ans Filtern gedacht habe! Das ist es wahrscheinlich, vielen Dank! –

+0

Ich werde es als eine Antwort erklären, um es ein bisschen besser zu erklären –

Antwort

4

Wie Sie die Ergebnisse in Ihrem SecondTable im Ergebnis filtern müssen, ist es besser, wenn Sie es tun, bevor der linke beizutreten. So wird der Code so etwas wie dieses:

val filteredSecondTable = SecondTable.filter(_.attribute === "value") 

val query = FirstTable joinLeft filteredSecondTable on (_.foreignId === _.id)