2

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

4

0 回答 0