2
두 개의 왼쪽 조인 (결국 Rep[Option[...]]
이 됨) 및 열 맵이있는 Slick 쿼리가 있습니다. 결과에 대해 필터링 (like
사용)해야합니다. 세 열 중 하나가 like
기준과 일치하면 행을 결과에 포함해야하므로 표를 사전 필터링 할 수 없습니다. 결과 조인을 필터링해야합니다 (Rep[Option]
).Slick 3.1, 왼쪽 조인 및 필터
Rep[Option[String]]
열을 필터링하는 방법을 생각할 수 없습니다. 아래의 코드는 "symbol ||을 해결할 수 없습니다"때문에 컴파일되지 않습니다. - Rep[Option]
열을 제거하면 완벽하게 컴파일됩니다. 다음
val joinedTable = Sites.map(s=>(s.id, s.gisId))
.joinLeft(SiteText.filter(_.lang==="jp").map(l=>(l.name, l.siteId))).on{ case(s,t)=>s._1===t._2 }
.joinLeft(SiteText.filter(_.lang==="en").map(l=>(l.name, l.siteId))).on{ case(st,t)=>st._1._1===t._2 }
val searchedTable = joinedTable.filter { row =>
List(
searchStr.map(t => row._1._1._2 like t),
searchStr.map(t => row._1._2.map(_._1 like t)),
searchStr.map(t => row._2.map(_._1 like t))
).collect({case Some(criteria) => criteria}).reduceLeftOption(_ || _).getOrElse(true: Rep[Boolean])
}