or
パラメータ値を使用してクエリに条件を追加する必要があります。
例:select * from users where email = "abc@xyz.com" or phone="1234123412";
ユーザーは、両方のフィールドを送信することも、1 つだけを送信することもできます。これを各フィールドのループで実行し、それぞれを条件に追加したいと考えていor where
ます。
val query = Users.selectAll()
**var predicates = Op.build { Users.id inList listOf<Int>()}**
for((k, v) in params) {
val value = URLDecoder.decode(v.first(), "UTF-8")
predicates = when(k) {
"email" -> predicates.or(Users.email eq value)
"phone" -> predicates.or(Users.phone eq value)
}
}
query.andWhere { predicates }
上記の DSL は、以下の SQL を生成します。
SELECT * from users where (((false = true) OR (users.email = "abc@xyz.com")) OR (users.phone = "1234567890"))
わかりfalse = true
ますか?メソッドを使用.or
するには、条件で初期化する必要があるためです。以下のスニペットは、述語を初期化するために追加された不要なコード行です。
var predicates = Op.build { Users.id inList listOf<Int>()}
or
複数のand
述語をクエリにシームレスに追加できるように初期化する正しい方法は何ですか?