本文介绍了有条件生锈柴油过滤查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对项目使用柴油,我希望使用";filterable";类型。其想法是您可以转到/api/foo?id=10&bar=11,它将返回一个结构Foo

struct Foo {
    id: Option<i64>,
    bar: Option<i64>,
    name: Option<String>,
}

如:

Foo {
   id: Some(10),
   bar: Some(11),
   name: None,
}

我一直在网上搜索,想找一条通过现有字段去过滤的路,但就是找不到一个可行的解决方案。我最初使用mysql driver并使用proc宏构造SQL查询,但DIESEL使用起来要好得多,我想知道是否有办法获得与使用DIESEL的MySQL驱动程序相同的行为。

推荐答案

可以使用into_boxed方法,该方法:

use crate::schema::foo;

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

if let Some(id) = foo.id {
    query = query.filter(foo::id.eq(id));
}

if let Some(bar) = foo.bar {
    query = query.filter(foo::bar.eq(bar));
}

if let Some(name) = foo.name {
    query = query.filter(foo::name.eq(name));
}

let results = query
    .load::<Foo>(&conn)
    .expect("error loading foo");

这篇关于有条件生锈柴油过滤查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-21 02:52