Динамический запрос с необязательными предложениями where с использованием Slick 3
Я пытаюсь реализовать метод для возврата отфильтрованных результатов, основанный на наборе параметров, которые могут быть или не быть установлены. Не похоже, что связывание нескольких фильтров возможно условно, то есть начиная с одного фильтра ...
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, который, кажется, достойный подход для обработки именно этого. Однако он не работает с Slick 3.x
Следуя рекомендациям Хусейна, приведенным ниже, я также попробовал следующее:
def search(departureLocation: Option[String], arrivalLocation: Option[String]) = {
val query = slickFlights.filter(flight =>
departureLocation.map {
param => param === flight.departureLocation
})
кудаslickFlights
является объектом TableQueryval slickFlights = TableQuery[Flights]
, Однако это приводит к следующей ошибке компиляции:
value === is not a member of String
Intellij также жалуется на то, что === является неизвестным символом. Также не работает с ==.