pub trait Model:
Send
+ Sync
+ Sized
+ 'static {
type PrimaryKey: Send + Sync + Debug + Display + Clone + Default;
// Required methods
fn table_name() -> &'static str;
fn pk(&self) -> Self::PrimaryKey;
fn set_pk(&mut self, pk: Self::PrimaryKey);
// Provided methods
fn pk_name() -> &'static str { ... }
fn foreign_key(relation: &str) -> String { ... }
fn timestamp_fields() -> Option<TimestampFields> { ... }
fn soft_delete_field() -> Option<&'static str> { ... }
fn tenant_field() -> Option<&'static str> { ... }
fn fields() -> Vec<(&'static str, &'static str)> { ... }
}Expand description
所有 ORM 模型必须实现的核心 trait
L-5 修复:补充示例文档
§示例
ⓘ
use sz_orm_model::model::Model;
#[derive(Debug, Clone, Default)]
struct User {
id: i64,
name: String,
}
impl Model for User {
type PrimaryKey = i64;
fn table_name() -> &'static str { "users" }
fn pk(&self) -> Self::PrimaryKey { self.id }
fn set_pk(&mut self, pk: Self::PrimaryKey) { self.id = pk; }
}
assert_eq!(User::table_name(), "users");
assert_eq!(User::pk_name(), "id");
assert_eq!(User::foreign_key("orders"), "orders_id");Required Associated Types§
Required Methods§
Sourcefn table_name() -> &'static str
fn table_name() -> &'static str
获取该模型对应的表名
Sourcefn pk(&self) -> Self::PrimaryKey
fn pk(&self) -> Self::PrimaryKey
获取当前实例的主键值
Sourcefn set_pk(&mut self, pk: Self::PrimaryKey)
fn set_pk(&mut self, pk: Self::PrimaryKey)
设置当前实例的主键值
Provided Methods§
Sourcefn foreign_key(relation: &str) -> String
fn foreign_key(relation: &str) -> String
根据关系名推导外键名(默认 <relation>_id)
M-9 说明:默认将 relation 转为小写后拼接 _id。
对于大小写敏感的列名(如 PostgreSQL 的 User_ID),业务模型应重写此方法。
Sourcefn timestamp_fields() -> Option<TimestampFields>
fn timestamp_fields() -> Option<TimestampFields>
获取自动时间戳字段配置
Sourcefn soft_delete_field() -> Option<&'static str>
fn soft_delete_field() -> Option<&'static str>
获取软删除字段名
Sourcefn tenant_field() -> Option<&'static str>
fn tenant_field() -> Option<&'static str>
获取多租户字段名(P0-3)
返回 Some(field) 表示该模型支持多租户,QueryBuilder 会在
with_tenant_id(id) 设置租户 ID 后自动追加 WHERE {field} = ? 条件。
默认返回 None(非多租户模型)。多租户模型应重写此方法返回字段名,
如 Some("tenant_id")。
与 TenantModel trait 的关系:TenantModel::tenant_field() 返回 &'static str
(非 Option),用于实例级的 tenant_id()/set_tenant_id() 操作;
本方法返回 Option<&'static str>,用于 QueryBuilder 静态判断模型是否多租户。
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".