gpt4 book ai didi

rust - 将柴油滤清器应用到单个 table 还是连接器?

转载 作者:行者123 更新时间:2023-12-03 11:45:27 27 4
gpt4 key购买 nike

我在运行时生成Diesel过滤器(使用类似于this question的方法)。我有一个函数make_filters,它为表tunnel生成过滤器:

fn make_filters() -> Vec<Box<dyn BoxableExpression<tunnel::table, Pg, SqlType = Bool>>>

我希望将这些过滤器应用于表 tunneltunnelconnection的联接。像这样:

let mut query = tunnel::table.left_join(connection::table).into_boxed();

for filter in filters.as_sql_where() {
query = query.filter(filter);
}

但是当我尝试时,出现此错误:
^^^ the trait 
`diesel::AppearsOnTable<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<tunnel::table, connection::table, diesel::query_source::joins::LeftOuter>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<connection::columns::tunnel_id>, diesel::expression::nullable::Nullable<tunnel::columns::id>>>>`

is not implemented for `dyn diesel::BoxableExpression<tunnel::table, diesel::pg::Pg, SqlType = diesel::sql_types::Bool>`

如果查询只是 tunnel::table.into_boxed(),这很好用,所以我想我需要归纳 make_filters的类型签名。

最小示例 here

最佳答案

由于过滤器可以同时应用于联接表和tunnel表,因此这里的首选解决方案是在联接表之前仅应用过滤器。所以这样的事情应该可以正常工作:

let mut query = tunnel::table.into_boxed();

for filter in filters.as_sql_where() {
query = query.filter(filter);
}

let query = query.left_join(connection::table);

关于rust - 将柴油滤清器应用到单个 table 还是连接器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140096/

27 4 0