Rust 有条件地过滤查询
我试图使用柴油的项目,我想有一个“过滤”类型。这个想法是,您可以转到Rust 有条件地过滤查询,rust,backend,rust-diesel,Rust,Backend,Rust Diesel,我试图使用柴油的项目,我想有一个“过滤”类型。这个想法是,您可以转到/api/foo?id=10&bar=11,它将返回一个structfoo: struct Foo { id: Option<i64>, bar: Option<i64>, name: Option<String>, } 我一直在互联网上搜寻一种通过现有字段进行过滤的方法,但我找不到一种有效的解决方案。我最初使用的是,并使用proc宏构造sql查询,但使用diesel
/api/foo?id=10&bar=11
,它将返回一个structfoo
:
struct Foo {
id: Option<i64>,
bar: Option<i64>,
name: Option<String>,
}
我一直在互联网上搜寻一种通过现有字段进行过滤的方法,但我找不到一种有效的解决方案。我最初使用的是,并使用proc宏构造sql查询,但使用diesel要更好,我想知道是否有办法获得与使用diesel的mysql驱动程序相同的行为。您可以使用该方法,它:
将查询的各个部分装箱为单个类型。
这对于希望有条件地修改查询,但需要保持查询类型不变的情况非常有用。装箱查询将导致较小的性能损失,因为编译器无法再内联查询生成器。对于大多数应用程序,此成本将是最低的
使用板条箱::模式::foo;
让mut query=foo::table.into_boxed();
如果让一些(id)=foo.id{
query=query.filter(foo::id.eq(id));
}
如果让一些(酒吧)=foo.bar{
query=query.filter(foo::bar.eq(bar));
}
如果让一些(名字)=foo.name{
query=query.filter(foo::name.eq(name));
}
让结果=查询
.加载::(&conn)
.expect(“加载foo时出错”);
Update:我制作了一个板条箱,用一个派生宏来处理这个问题,
Foo {
id: Some(10),
bar: Some(11),
name: None,
}