Expand description
ActiveValue / ActiveModel — 三态字段更新模式
解决“仅更新部分字段“的类型安全问题:传统 Model 无法区分
“字段未设置“与“字段值为 NULL”,导致 UPDATE 要么更新全字段,
要么需要手动构建 HashMap。
§设计
ActiveValue<T>— 三态枚举:Set(T)/Unchanged/NotSetActiveModel— trait,定义模型如何暴露变更字段ActiveModel<M>— 通用包装器,为任意Model提供 dirty trackingupdate/save— 自由函数,执行持久化
§用法
ⓘ
use sz_orm_core::active_model::{ActiveModel, ActiveValue, update, save};
// 从已有模型创建 ActiveModel(所有字段初始为 Unchanged)
let mut active = user.into_active_model();
// 仅修改需要更新的字段
active.set("email", ActiveValue::Set("new@example.com".into()));
// 生成:UPDATE users SET email = ? WHERE id = ?
update(&mut conn, active).await?;
// 新建模型:所有字段默认 NotSet,需显式 Set
let mut new_active = User::default().into_active_model();
new_active.set("name", ActiveValue::Set("Alice".into()));
new_active.set("email", ActiveValue::Set("alice@example.com".into()));
save(&mut conn, new_active).await?;Structs§
- Active
Model - 通用 ActiveModel 包装器
Enums§
- Active
Value - 字段值的三态表示
Traits§
- Active
Model Ext - 内部辅助 trait,为
update()提供主键列名 - Active
Model Trait - ActiveModel 行为 trait