rust - 如何在柴油中实现嵌套过滤器?
问题描述
我对 Rust 和 Diesel 很陌生。我现在正在尝试为这样的查询实现 Diesel 过滤:
-- @param1 is duration in years
-- @param2 is duration in months
SELECT columns FROM a
WHERE
(...dynamic AND clauses)
AND (((a.min_unit = "Years") AND (a.min_duration <= @param1))
OR ((a.min_unit = "Months") AND (a.min_duration <= @param2)))
(...dynamic AND clauses)
在文档和网络上进行一些搜索后,我仍然找不到如何执行此操作。我最接近的猜测是:
let param1 = ...;
let param2 = ...;
let mut query = a::table.select(a::all_columns).into_boxed();
// dynamic clauses: query = query.filter(...) ...
query = query.filter(a::min_unit.eq(Some("Years")).and(a::min_duration.le(Some(param1))))
.or_filter(a::min_unit.eq(Some("Months")).and(a::min_duration.le(Some(param2))));
// dynamic clauses: query = query.filter(...) ...
let results = a::table.load<A>(&*conn);
有人有想法吗?
谢谢!
解决方案
您的代码实际上看起来是正确的(我没有运行它)。这里的文档指出了它是如何完成的:https foo.filter(bar).or_filter(baz) is like foo.filter(bar.or(baz))
://docs.diesel.rs/diesel/query_dsl/trait.QueryDsl.html#method.or_filter但第二个是“嵌套的”。所以,得到
(id = 5 OR other = 6) AND foo=7
一个就可以了
.filter(id.eq(5).or(other.eq(6))).filter(foo.eq(7))
。希望有帮助!
推荐阅读
- angularjs - Angular 指令无法解决承诺
- r - ggplot2中的5个值unicode字符
- app-store - 我的应用程序被拒绝..我如何上传新的二进制文件(IOS)
- javascript - svgelement.enter() 上未发生 D3 转换
- android - 动态设置工作请求顺序
- google-api - 使用测试经理帐户将第三方应用分析链接到 Google Ads 时,未从测试客户帐户获取 Google Ad 字词链接 ID
- javascript - Axios 在嵌套的 Vue JS (Laravel API) 中返回 undefined
- php - 我该如何解决这个错误(Laravel 5.7)?
- javascript - 将 AM/PM 字符串转换为小时
- java - NONCE 中的 WSS4J 编码类型缺失(Loadrunner Java)