pub struct RelationDef {
pub name: &'static str,
pub from_entity: &'static str,
pub to_entity: &'static str,
pub from_key: &'static str,
pub to_key: &'static str,
pub kind: RelationKind,
pub join_table: Option<&'static str>,
pub join_from_key: Option<&'static str>,
pub join_to_key: Option<&'static str>,
}Expand description
关联关系定义(零分配,编译期常量)
描述两个实体间的关联关系,包含外键映射信息。
所有字段为 &'static str,运行时零分配。
v2.3.0 新增 ManyToMany 中间表元数据字段(join_table/join_from_key/join_to_key),
通过 RelationDef::new_many_to_many 构造器设置,new() 构造器保持向后兼容(中间表字段为 None)。
Fields§
§name: &'static str关联名称(如 “orders”、“profile”)
from_entity: &'static str源实体表名(如 “users”)
to_entity: &'static str目标实体表名(如 “orders”)
from_key: &'static str源实体键列名(通常为主键,如 “id”)
to_key: &'static str目标实体外键列名(如 “user_id”)
kind: RelationKind关联类型
join_table: Option<&'static str>ManyToMany 中间表名(v2.3.0 新增,仅 ManyToMany 关联使用)
join_from_key: Option<&'static str>中间表中指向源实体的外键列名(v2.3.0 新增)
join_to_key: Option<&'static str>中间表中指向目标实体的外键列名(v2.3.0 新增)
Implementations§
Source§impl RelationDef
impl RelationDef
Sourcepub const fn new(
name: &'static str,
from_entity: &'static str,
to_entity: &'static str,
from_key: &'static str,
to_key: &'static str,
kind: RelationKind,
) -> Self
pub const fn new( name: &'static str, from_entity: &'static str, to_entity: &'static str, from_key: &'static str, to_key: &'static str, kind: RelationKind, ) -> Self
创建关联关系定义
v2.3.0 中间表字段默认为 None,确保 v2.2.0 代码零修改编译通过。
Sourcepub const fn new_many_to_many(
name: &'static str,
from_entity: &'static str,
to_entity: &'static str,
from_key: &'static str,
to_key: &'static str,
join_table: &'static str,
join_from_key: &'static str,
join_to_key: &'static str,
) -> Self
pub const fn new_many_to_many( name: &'static str, from_entity: &'static str, to_entity: &'static str, from_key: &'static str, to_key: &'static str, join_table: &'static str, join_from_key: &'static str, join_to_key: &'static str, ) -> Self
创建 ManyToMany 关联关系定义(v2.3.0 新增)
强制 kind = ManyToMany,并设置中间表元数据。
§参数
name:关联名称(如 “roles”)from_entity:源实体表名(如 “users”)to_entity:目标实体表名(如 “roles”)from_key:源实体主键列名(如 “id”)to_key:目标实体主键列名(如 “id”)join_table:中间表名(如 “user_roles”)join_from_key:中间表中指向源实体的外键(如 “user_id”)join_to_key:中间表中指向目标实体的外键(如 “role_id”)
ⓘ
let rel = RelationDef::new_many_to_many(
"roles", "users", "roles", "id", "id",
"user_roles", "user_id", "role_id",
);
assert_eq!(rel.kind, RelationKind::ManyToMany);
assert_eq!(rel.join_table, Some("user_roles"));Trait Implementations§
Source§impl Clone for RelationDef
impl Clone for RelationDef
Source§fn clone(&self) -> RelationDef
fn clone(&self) -> RelationDef
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for RelationDef
impl RefUnwindSafe for RelationDef
impl Send for RelationDef
impl Sync for RelationDef
impl Unpin for RelationDef
impl UnsafeUnpin for RelationDef
impl UnwindSafe for RelationDef
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more