我正在使用 Diesel 并希望将部分查询传递给函数并从函数返回部分查询。我正在努力制定我的功能签名。
我想按 ID 加载博客文章,但首先我想过滤它:
let query = wp_posts
.filter(post_type.eq("solution_article"))
.filter(post_status.eq("publish"))
.limit(1);
然后我将把它传递给另一个函数以按 ID 加载
pub fn query_by_id<Q>(db: &PooledMySqlConnection, query: Q, id: u64) -> Option<Post>
where
Q: QueryDsl,
{
let result = query.filter(ID.eq(id)).load::<Post>(db);
if let Ok(mut result) = result {
return result.pop();
}
None
}
这不起作用,因为我正在努力为Q
. 编译器通常没有太大帮助(或者我不明白):
error[E0275]: overflow evaluating the requirement `<Q as diesel::query_dsl::filter_dsl::FilterDsl<_>>::Output`
--> src/endpoint.rs:37:10
|
37 | .filter(ID.eq(id))
| ^^^^^^
|
= help: consider adding a `#![recursion_limit="2048"]` attribute to your crate
我已经多次提高递归限制无济于事。
同样,我想从一个函数中返回我常用的过滤器,所以我也需要找到这个类型。
虽然我确信有人可以告诉我要使用的正确类型,但我怎样才能逐步完成并自己找到它?我确信QueryDsl
这是文档中正确的类型,我哪里出错了?