좋아 슬릭,이동적 또는 필터링 -
def(username: Option[String], petname: Option[String], favouritefood: Option[String])
같은 여러 옵션 인수하는 방법이 있는데 나는에 정의 된 인수의 데이터를 가져 오는 할 수있을 것입니다 동적 쿼리를 작성하려면 이쪽의 방법
이렇게 어떤 인수가 OR 연산자로 쿼리에 추가되도록 정의 되었습니까?
좋아 슬릭,이동적 또는 필터링 -
def(username: Option[String], petname: Option[String], favouritefood: Option[String])
같은 여러 옵션 인수하는 방법이 있는데 나는에 정의 된 인수의 데이터를 가져 오는 할 수있을 것입니다 동적 쿼리를 작성하려면 이쪽의 방법
이렇게 어떤 인수가 OR 연산자로 쿼리에 추가되도록 정의 되었습니까?
이와 비슷한 기능이 작동합니다. 필자는 자신의 코드에서 비슷한 조각을 사용해야했으며 위의 주석에 cvogt가 제안한 것과 비슷합니다 (필자 생각).
val username = Option("")
val petname = Option("")
val ff:Option[String] = None
val default = LiteralColumn(1) === LiteralColumn(1)
yourTable.filter { it =>
List(
username.map(it.username === _),
petname.map(it.petname === _),
ff.map(it.ff === _)
).collect({case Some(it) => it}).reduceLeftOption(_ || _).getOrElse(default)
}
궁금 해서요,이게 효과가 있습니까? – tfh
예, 위대한 작품입니다.) 이제는 4 개의 선택적 값과 같은 것이 필요합니다. 그리고 조건이 정의 된 조건을 포함하는 쿼리를 작성해야합니다. 'code' def (a1 : 옵션 [문자열], a2 : 옵션 [문자열], a3 : 옵션 [문자열]) 'code' a1 - 일부 ("안전") 'code' a2 - 일부 ("안전하지 않음") 'code' a3 - 없음 'code' select * from table where a1과 같은 열 또는 a2와 같은 열 어디에서 정의되지 않은 것을 무시할 것입니까? – bgvoka
내 대답을 수정했습니다. 'None'에'map '하면이 값은'None'으로 유지됩니다. 결국 정의 된 값을 필터링 할 수 있습니다. – tfh
간단한 사용 사례는 좋지만 제한이 있습니다. 모든 옵션이 None 인 경우 목록이 비어있어 빈 목록을 줄일 수 없습니다.
술어, 연결 및 분리 (Hibernate/JPA Criteria API와 같은 비트)를 기반으로 더 복잡한 것을 필요로하는 경우, , 내 대답을 확인할 수 있습니다 Slick: create query conjunctions/disjunctions dynamically
빈 목록도 처리하도록 내 대답이 업데이트되었습니다.이 특정 경우에'getOrElse'와 함께'reduceLeftOption'을 사용할 수 있습니다. – tfh
아마, 당신은이 블로그를 사용해 볼 수 있습니다. http://davidruescas.com/2013/12/27/querying-in-slick-with-many-optional-constraints/ –
다음과 같이해야한다고 생각합니다. http://stackoverflow.com/questions/26815913/ do-do-do-do-do-filter-in-slick – vitalii
이미 확인되었지만 쿼리를 작성할 때 for-comprehension에 정의되어 있는지 확인할 수 없기 때문에 Optional 값에는 사용할 수 없습니다. – bgvoka