本章讨论使用 SeaORM 修改数据
代码
pub async fn edit(
Extension(state): Extension<Arc<AppState>>,
Form(frm): Form<form::CategoryForm>,
Path(id): Path<i32>,
) -> Result<RedirectRespon> {
let handler_name = "category/edit";
let conn = get_conn(&state);
let am = category::ActiveModel {
id: Unchanged(id),
name: Set(frm.name),
..Default::default()
};
am.update(conn)
.await
.map_err(AppError::from)
.map_err(log_error(handler_name))?;
redirect("/category?msg=分类修改成功")
}
Unchanged()
update()
update()
执行数据库的 UPDATE
操作。
自动决定是更新还是插入 - save()
上一章我们使用 insert()
来插入数据,本章我们使用update()
来更新数据。其实 SeaORM 提供了 save()
,它可以自动决定是插入还是更新:
- 当主键为
NotSet
时,执行INSERT
- 当主键为
Set
或UnChange
时,执行UPDATE
// INSERT
category::ActiveModel {
id: NotSet,
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
// UPDATE
category::ActiveModel {
id: Unchanged(id),
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
// UPDATE
category::ActiveModel {
id: Set(id),
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
ActiveValue
枚举
Set
、NotSet
和Unchanged
都是 ActiveValue
的枚举值。