我正在使用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
是文档中正确的类型,我哪里出错了?