設定されていても設定されていないパラメータのセットに基づいて、フィルタ処理された結果を返すメソッドを実装しようとしています。それは(それがのparamsの地図に存在する場合) Slick 3を使用してオプションのwhere句を使用した動的クエリ
val slickFlights = TableQuery[Flights]
val query = slickFlights.filter(_.departureLocation === params("departureLocation").toString)
は条件付きでいないようクエリに別のフィルタを追加...一つのフィルタでオフに開始する。すなわち、複数のフィルタを連鎖することは条件付きで可能であるように見えるしていません...
if (params.contains("arrivalLocation")) {
query.filter(_.arrivalLocation === params("arrivalLocation").toString)
}
この種の条件フィルタリングは、他の方法でSlickを使用して行うことができますか?
私はMaybeFilter:https://gist.github.com/cvogt/9193220を見つけました。これは正確にこれを処理するためのまともなアプローチのようです。しかし、以下のフセインの提案に続きスリック3.xの
で動作するようには思えない、私はまた、次のことを試してみました:
slickFlights
はTableQueryオブジェクト
val slickFlights = TableQuery[Flights]
ある
def search(departureLocation: Option[String], arrivalLocation: Option[String]) = {
val query = slickFlights.filter(flight =>
departureLocation.map {
param => param === flight.departureLocation
})
。ただし、次のコンパイルエラーが発生します。
Intellijも不明なシンボルであることについて不平を言います。 ==でも動作しません。