Запрос таблицы Diesel с динамическими параметрами

Я начал изучать использование 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 позволяет динамически выбирать поля и сортировать их на основе параметров запроса. Как бы я сделал это в дизеле?


person Blake Pettersson    schedule 02.03.2017    source источник


Ответы (1)


Использование черты в рамке:

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

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

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

Ok(items)
person John T    schedule 24.11.2018