Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 有条件地过滤查询_Rust_Backend_Rust Diesel - Fatal编程技术网

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
,它将返回一个struct
foo

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,
}