使用动态参数查询柴油表

时间:2017-03-02 14:04:10

标签: rust rust-diesel

我开始考虑使用Diesel查询数据库。我有一个看起来像下面的结构的表(这只是一个玩具项目,以帮助我理解柴油机是如何工作的)。

#[derive(Queryable, Insertable)]
#[table_name="posts"]
struct Post {
    id: String,
    title: String,
    body: String,
    published: bool
}

在编译时完成确定的查询很容易,例如

posts.select(id, title).order(title.desc());

我不清楚如何根据某些运行时参数构建查询,而不必回退到SQL。例如,JSONAPI允许动态选择字段并根据查询参数对其进行排序。我将如何在迪赛尔做到这一点?

1 个答案:

答案 0 :(得分:0)

使用盒装特征:

let mut q = dsl::constants.into_boxed();

if msg.0.is_some() {
    let sid = msg.0.unwrap();
    q = q.filter(dsl::id.eq(sid));
}

let items = q
    .order(dsl::id)
    .load::<Constant>(conn)
    .expect("Can't load Constant");

Ok(items)