2
私は2つの左の結合(これはRep[Option[...]]
となります)と列マップを持つSlickクエリを持っています。私は結果に(like
を使用して)フィルタリングする必要があります。 3つの列のいずれかがlike
の条件と一致する場合は、結果に行を含める必要があります。したがって、テーブルを事前にフィルタリングできません。結果の結合をフィルタリングする必要があります。Rep[Option]
とすべて。Slick 3.1、Left Joins and Filters
Rep[Option[String]]
の列をフィルタリングする方法がわかりません。以下のコードは "シンボルを解決できません|" - 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])
}