Consulta dinámica con cláusulas where opcionales usando Slick 3
Estoy tratando de implementar un método para devolver resultados filtrados, basado en un conjunto de parámetros que pueden o no establecerse. No parece que sea posible encadenar múltiples filtros condicionalmente, es decir, comenzar con un filtro ...
val slickFlights = TableQuery[Flights]
val query = slickFlights.filter(_.departureLocation === params("departureLocation").toString)
Agregar condicionalmente otro filtro a la consulta (si existe en el Mapa de parámetros) no parece funcionar ...
if (params.contains("arrivalLocation")) {
query.filter(_.arrivalLocation === params("arrivalLocation").toString)
}
¿Se puede hacer este tipo de filtrado condicional usando Slick a través de otros medios?
Me he encontrado con el MaybeFilter:https://gist.github.com/cvogt/9193220, que parece ser un enfoque decente para manejar exactamente esto. Sin embargo, no parece funcionar con Slick 3.x
Siguiendo las sugerencias de Hüseyin a continuación, también he intentado lo siguiente:
def search(departureLocation: Option[String], arrivalLocation: Option[String]) = {
val query = slickFlights.filter(flight =>
departureLocation.map {
param => param === flight.departureLocation
})
DóndeslickFlights
es un objeto TableQueryval slickFlights = TableQuery[Flights]
. Sin embargo, esto produce el siguiente error de compilación:
value === is not a member of String
Intellij también se queja de que === es un símbolo desconocido. No funciona con == tampoco.