Skip to main content

Module active_model

Module active_model 

Source
Expand description

ActiveValue / ActiveModel — 三态字段更新模式

解决“仅更新部分字段“的类型安全问题:传统 Model 无法区分 “字段未设置“与“字段值为 NULL”,导致 UPDATE 要么更新全字段, 要么需要手动构建 HashMap。

§设计

  • ActiveValue<T> — 三态枚举:Set(T) / Unchanged / NotSet
  • ActiveModel — trait,定义模型如何暴露变更字段
  • ActiveModel<M> — 通用包装器,为任意 Model 提供 dirty tracking
  • update / 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§

ActiveModel
通用 ActiveModel 包装器

Enums§

ActiveValue
字段值的三态表示

Traits§

ActiveModelExt
内部辅助 trait,为 update() 提供主键列名
ActiveModelTrait
ActiveModel 行为 trait

Functions§

save
执行 INSERT 或 UPDATE(upsert)
update
执行 UPDATE,仅更新 ActiveModel 中标记为 Set 的字段