Rust diesel有条件地更新字段



我试图使用柴油diesel = { version = "1.4.8", features = ["postgres","64-column-tables","chrono","serde_json"] }的一个项目,我想更新一些字段在postgresql表,从客户端定义的传递参数如下:

pub struct UpdateChannelRequest {
pub channelId: i64,
pub tags: Option<Vec<Tag>>,
pub commentRss: i32,
pub partOutput: i32,
pub subStatus: i32
}

我现在正在使用这个代码来更新表:

pub fn update_channel_impl(request: &Json<UpdateChannelRequest>){
use crate::model::diesel::dolphin::dolphin_schema::rss_sub_source::dsl::*;
let connection = config::establish_connection();
let predicate = crate::model::diesel::dolphin::dolphin_schema::rss_sub_source::id.eq(request.channelId);
diesel::update(rss_sub_source.filter(predicate))
.set((comment_rss.eq(&request.commentRss),part_output.eq(&request.partOutput),sub_status.eq(&request.subStatus)))
.get_result::<RssSubSource>(&connection)
.expect("unable to update channel");
}

我面临的问题是,前端需要通过所有的更新字段每次。是否有可能使服务器端有条件更新与传递字段?例如,将一些字段定义为Option,如果传递字段值,则更新它。如果没有传递值,则忽略字段(必须传递id,因为我们需要通过id更新记录)。

如果结构体上有任何可选字段,这些字段也会有特殊的行为。默认情况下,#[derived (AsChangeset)]将假定None表示您不希望分配该字段。

所有关于更新的指南

最新更新